【Python】《Python编程:从入门到实践 (第2版) 》笔记-Chapter4-操作列表

四、操作列表
  1. 使用for循环遍历整个列表
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)
    print(f"I can't wait to see your next trick, {magician.title()}.\n")
  • 在for 循环中,想包含多少行代码都可以。在代码行for magician in magicians后面,每个缩进的代码行都是循环的一部分,将针对列表中的每个值都执行一次。
  1. Python根据缩进来判断代码行与前一个代码行的关系。如果你不小心缩进了无须缩进的代码行,Python将指出这一点。

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

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

  4. Python函数range()让你能够轻松地生成一系列数。

for value in range(1, 5): 
    print(value)

1
2
3
4
  • 函数range()让Python从指定的第一个值开始数,并在到达你指定的第二个值时停止。因为它在第二个值处停止,所以输出不包含该值(这里为5)。
  • 调用函数range()时,也可只指定一个参数,这样它将从0开始。例如,range(6)返回数0~5。
  1. 要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将是一个数字列表。
numbers = list(range(1, 6)) 
print(numbers)                  // [1, 2, 3, 4, 5]

// 在这个示例中,函数range()从2开始数,然后不断加2,直到达到或超过终值
even_numbers = list(range(2, 11, 2))
print(even_numbers)             // [2, 4, 6, 8, 10]

// 创建一个列表,其中包含前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]

  • 使用函数range()时,还可指定步长。为此,可给这个函数指定第三个参数,Python将根据这个步长来生成数。
  1. 有几个专门用于处理数字列表的Python函数。
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
  1. 列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。
squares = [value**2 for value in range(1, 11)] 
print(squares)      // [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • 要使用这种语法,首先指定一个描述性的列表名,如squares。然后,指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为value**2,它计算平方值。接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。在这个示例中,for循环为for value in range(1,11),它将值1~10提供给表达式value**2。请注意,这里的for 语句末尾没有冒号
  1. 还可以处理列表的部分元素,Python称之为切片。要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range()一样,Python在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索引为0、1和2的元素。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])     // ['charles', 'martina', 'michael']

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 = ['charles', 'martina', 'michael', 'florence', 'eli'] 
print(players[-3:])     // ['michael', 'florence', 'eli']
  • 如果没有指定第一个索引,Python将自动从列表开头开始。要让切片终止于列表末尾,也可使用类似的语法。
  • 负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任意切片。
  • 注意 可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每隔多少元素提取一个。
  1. 如果要遍历列表的部分元素,可在for循环中使用切片。
for player in players[:3]: 
    print(player.title())
  1. 要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]

friend_foods.append('ice cream')

# 这行不通:
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print(my_foods)     // ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
  • 如果只是将my_foods 赋给friend_foods,就不能得到两个列表。这里将my_foods赋给friend_foods,而不是将my_foods的副本赋给friend_foods。这种语法实际上是让Python将新变量friend_foods关联到已与my_foods相关联的列表,因此这两个变量指向同一个列表。
  1. 列表非常适合用于存储在程序运行期间可能变化的数据集。

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

  3. 元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。

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

my_t = (3,)
  • 严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号。
  • 创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。
  1. 像列表一样,也可以使用for循环来遍历元组中的所有值。
dimensions = (200, 50)
for dimension in dimensions: 
    print(dimension)
  1. 虽然不能修改元组的元素,但可以给存储元组的变量赋值。
dimensions = (200, 50)
print("Original dimensions:") 
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:") 
for dimension in dimensions:
    print(dimension)
  • 给元组变量重新赋值是合法的。
  1. 如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。

  2. 要提出Python语言修改建议,需要编写Python改进提案(Python Enhancement Proposal,PEP)。PEP 8是最古老的PEP之一,向Python程序员提供了代码格式设置指南。

  • PEP 8建议每级缩进都使用四个空格(并非制表符)。
  • 很多Python程序员建议每行不超过80字符。
  • PEP 8还建议注释的行长不应超过72字符,因为有些工具为大型项目自动生成文档时,会在每行注释开头添加格式化字符。
  • 要将程序的不同部分分开,可使用空行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值