《Python从入门到实践》读书笔记——第四章 操作列表

《Python从入门到实践》读书笔记——第四章 操作列表

1. 遍历整个列表

使用Python中的 for循环

magicians = ['alice' ,'david' ,'carolina']
for magician in magicians:
    print(magician)

定义一个fir循环,这行代码让Python从列表 magicinas 中取出一个名字, 并将其与变量 magician 相关联, 最后, 让Python打印前面赋给变量 magician 的名字. 这样, 对于列表中的每个名字, Python都将重复执行 2 和 3 的代码行.

1.1 深入研究循环

刚开始使用循环时请牢记, 对于列表中的每个元素, 都将执行循环指定的步骤, 而不管列表包含多少个元素. 如果列表包含一百万个元素, Python就重复执行一百万次, 且通常速度非常快.
另外,编写for循环时,可以给依次与列表中每个值相关联的临时变量指定任意任意名称. 然而, 选择描述单个列表元素的有意义名称大有裨益.
这些命名约定有助于你明白for循环将对每个执行的操作.使用单数和复数式名称, 可帮助你判断代码段处理的是单个列表元素还是整个列表.

1.2 在for循环中执行更多操作

在for循环中,想包含多少行代码都可以,在代码行 for magician in magicians 后面, 每个缩进的代码行都是循环的一部分,将针对列表中的每个值都执行一次. 因此, 可对列表中的每个值执行任意次数的操作.

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(f'{magician.title()}, that was a great trick!')
    print(f"I can't wait to see you next trick,{magician.title()}.\n")
    
#
Alice, that was a great trick!
I can't wait to see you next trick,Alice.

David, that was a great trick!
I can't wait to see you next trick,David.

Carolina, that was a great trick!
I can't wait to see you next trick,Carolina.  

1.3 在for循环后执行一些操作

需要将相应的代码放在for循环后面,且 不缩进 .

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(f'{magician.title()}, that was a great trick!')
    print(f"I can't wait to see you next trick,{magician.title()}.\n")

print("Thank you, everyone. That was a great magic show!")

2. 避免缩进错误

2.1 忘记缩进

Python没有找到期望缩进的代码块时,会让你知道哪行代码有问题.

2.2 忘记缩进额外的代码行

这样代码是合法的,但是发生了 逻辑错误

2.3 不必要的缩进

不小心缩进了无须缩进的代码行, Python将指出这一点
请 只缩进需要缩进的代码

2.4 循环后不必要的缩进

不小心缩进了应在循环结束后缩进的代码,可能导致语法错误,但通常会发生逻辑错误

2.5 遗漏了冒号

for语句末尾的冒号告诉Python, 下一行是循环的第一行. 如果不小心遗漏了冒号, 将导致语法错误.

3. 创建数值列表

列表 非常适合用于存储数字集合, 而Python提供了很多工具, 可帮助你高效地处理数字列表.

3.1 使用函数 range()

range() 让你能够轻松地生成一系列数

for value in range(1,5):
    print(value)
#
1
2
3
4

在这个示例中, range() 只打印数1~4. 这是编程语言中常见的 差一行为 的结果. 函数 range() 让Python从指定的第一个值开始数, 并在到达你指定的第二个值时停止. 因为它在第二个值处停止, 所以输出不包含该值(这里为5).
使用 range() 时,如果输出不符合预期,请尝试将指定的值加 1 或减 1 .
调用函数 range() 时,也可只指定一个参数,这样它将从 0 开始. 例如 range(6) 返回数0~5.

3.2 使用 range() 创建数字列表

要创建数字列表,可使用函数 list()range() 的结果直接转换为列表. 如果将 range() 作为 list() 的参数, 输出将是一个数字列表

numbers = list(range(1,6))
print(numbers)

#
[1, 2, 3, 4, 5]

使用函数 range() , 还可以 指定步长 . 为此,可给这个函数指定 第三个 参数, Python将根据这个步长来生成数.

even_numbers = list(range(2,11,2))
print(even_numbers)

#
[2, 4, 6, 8, 10]

在这个示例中, range() 从 2 开始数,然后不断加 2 , 直到 达到或超过 终值(11).

使用函数 range() 几乎能够创建任何需要的数集. 例如, 创建一个列表, 其中包含前10个整数(1~10)的平方

squares = []
for value in range(1,11):
    square = value ** 2
    squares.append(square)
    
print(squares)

#
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

为了让代码更简洁, 可不使用临时变量 square , 而直接将每个计算得到的值附加到列表末尾

squares = []
for value in range(1,11):
    squares.append(value ** 2)
    
print(squares)

#
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

创建更复杂的列表时,可使用上述两种方法中的任何一种. 有时候, 使用临时变量会让代码更易读; 而在其他情况下, 这样做只会让代码无谓地变长. 你首先应该考虑的是,编写清晰易懂且能完成所需功能的代码, 等到审核代码时, 再考虑采用更高效的方法.

3.3 对数字列表执行简单的统计计算

>>> digits = [1,2,3,4,5,6,7,8,9,0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45

3.4 列表解析

列表解析 将for循环和创建新元素的代码合并成一行, 并自动附加新元素

squares = [value ** 2 for value in range(1,11)]
print(squares)

要使用这种语法, 首先指定一个描述性的列表名, 如 squares . 然后, 指定一个左方括号并定义一个表达式,用于要成要存储到列表中的值. 在这个示例中, 表达式为 value**2 , 它计算平方值. 接下来, 编写一个for循环, 用于给表达式提供值, 在加上右方括号. 在这个示例中, for循环为 for value in range(1,11) , 它将值 1~10 提供给表达式 value**2 . 请注意, 这里的for语句末尾 没有冒号 .

4 使用列表的一部分

列表的部分元素,Python称之为 切片

4.1 切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引. 与函数 range() 一样, Python在到达第二个索引之前的元素后停止.要输出列表中的前三个元素, 需要指定索引 0 和 3 , 这将返回索引为 0 、 1和2的元素.

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])

#
['martina', 'michael', 'florence']

如果没有指定第一个索引, Python将自动从列表开头开始:

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])

#
['charles', 'martina', 'michael', 'florence']

要让切片终止于列表末尾, 也可以使用类似的语法.

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])

#
['michael', 'florence', 'eli']

如果要输出名单上的最后三名队员, 可使用切片 players[-3:]

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

#
['michael', 'florence', 'eli']

可在表示切片的方括号内指定第三个值.这个值告诉Python在指定范围内每隔多少元素提取一个

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:4:2])

#
['charles', 'michael']

4.2 遍历切片

如果要遍历列表的部分元素, 可在for循环中使用切片.

#遍历前三名队员, 并打印他们的名字
players = ['charles', 'martina', 'michael', 'florence', 'eli']

print("Here are the first three players on my team:")
for player in players[:3]:
    print(player.title())

#
Here are the first three players on my team:
Charles
Martina
Michael

4.3 复制列表

要复制列表, 可创建一个 包含整个列表的切片 , 方法是同时省略起始索引和终止索引( [:] ).这样Python创建一个整个列表的副本

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]

print("My favorite foods are:")
print(my_foods)

print("\nMy friend's favorite foods are:")
print(friend_foods)

#
My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']	

在不使用切片的情况下复制列表 friend_foods = my_foods 实际上是让Python将新变量friend_foods 关联到已与 my_foods 相关联的列表, 因此这两个变量指向 同一个列表 .

5. 元组

Python将不能修改的值成为 不可变的 , 而不可变的列表被称为 元组

5.1 定义元组

元组看起来很像列表,但使用 圆括号 而非中括号来标识. 定义元组后, 就可 使用索引来访问 其元素,就像访问列表元素一样.
例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元祖中, 从而确保它们是不能修改的:

dimensions = (200 , 50)
print(dimensions[0])
print(dimensions[1])

dimensions[0] = 250 将报错
由于 试图修改元组的操作被禁止的 ,因此Python指出不能给元组的元素赋值

严格地说, 元组是由逗号标识的, 圆括号只是让元组看起来更整洁、更清晰. 如果你要定义一个只包含一个元素的元组, 必须在这个元素后面加上逗号:
my_t =(3,)

创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素

5.2 遍历元组中的所有值

像列表一样,也可以 使用for循环来遍历元组中的所有值 :

dimensions = (200 , 50)
for dimension in dimensions:
    print(dimension)
    
#
200
50

5.3 修改元组变量

虽然不能修改元组的元素, 但 可以给存储元组的变量赋值. 因此, 如果要修改前述矩形的尺寸, 可重新定义整个元组:

dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)
    
#Python不会报错,因为给元组变量重新赋值是合法的
Original dimensions:
200
50

Modified dimensions:
400
100

相比于列表, 元组是更简单的数据结构. 如果需要存储的一组值在程序的整个生命周期内都不变, 就可以使用元组.

6. 设置代码格式

6.1 格式设置指南

易于阅读

6.2 缩进

PEP 8 建议每级缩进都使用四个空格. 在程序中混合使用制表符和空格可能导致极难排查的问题. 如果混合使用了制表符和空格可将文件中所有制表符都转换为空格,大多数编译器都提供了这样的功能
在编写代码时绝对应该使用制表符键, 但一定要对编辑器进行设置, 使其在文档中插入空格而不是制表符.

6.3 行长

标准行长 79字符
PEP8 还建议注释的行长不应超过 72 字符

6.4 空行

应该使用空行来组织程序文件,但也不能滥用

7. 小结

  • 使用for循环遍历
  • 使用 range() 创建数字列表
  • 切片 players[1:4])
  • 元组 dimensions = (200 , 50)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值