第四章 操作列表
4.1 for循环引用列表的内容
thanks = ['father', 'mother']
for thank in thanks:
print('I want to thank my ' + thank.title() + '!')
print('Thank you very much,' + thank.title() + '!\n')
print('Thanks all of you!')
结果:
I want to thank my Father!
Thank you very much,Father!
I want to thank my Mother!
Thank you very much,Mother!
Thanks all of you!
注意:For循环语句后面的冒号容易遗漏,缩进了的内容均代表循环内的指令,要特别注意缩进的正确性。
4.2 数字列表的操作
4.2.1 使用range()创建数字列表
numbers = list(range(1,6))
print(numbers)
结果:
[1, 2, 3, 4, 5]
使用函数range()时,还可指定步长。例如,下面的代码打印1~10内的偶数:
even_numbers = list(range(2,11,2))
print(even_numbers)
结果:
[2, 4, 6, 8, 10]
在这个示例中,函数range()从2开始数,然后不断地加2(这个2称为步进的步长),直到达到或超过终值。
4.2.2 平方数字列表的集中写法
完整写法:
squares = []
for value in range(1,11):
values = value**2
squares.append(values)
print(squares)
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种写法代码结构清晰,容易看懂,但是代码较长。
部分简化写法:
squares = []
for value in range(1,11):
squares.append(value**2)
print(squares)
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种写法结构仍然清晰,同时简化了一些不必要的过度。
完全简化写法:
squares = [value**2 for value in range(1,11)]
print(squares)
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
代码缺乏层次感,读者需要解读代码执行的顺序,不适宜逻辑关系复杂的代码书写。
4.2.3 简单的数字列表运算
numbers = list(range(1,11))
print(min(numbers))
print(max(numbers))
print(sum(numbers))
结果:
1 #列表最小值
10 #列表最大值
55 #列表求和
4.3 使用列表的一部分
4.3.1 列表切片
players = ['A', 'B', 'C', 'D', 'E']
print(players[1:3])
print(players[:3])
print(players[1:])
结果:
['B', 'C']
['A', 'B', 'C']
['B', 'C', 'D', 'E']
观察以上三个切片的输出结果,总结出表达式的含义。
列表切片的使用与列表的使用是一致的。
4.3.2 列表复制
players = ['A', 'B', 'C', 'D']
players_m = players #镜像列表,感觉这没啥意义
players_f = players[:] #复制列表
players.append('E')
print(players_m)
print(players_f)
结果:
['A', 'B', 'C', 'D', 'E']
['A', 'B', 'C', 'D']
我们分别对原列表创建了一个镜像列表和复制列表,然后对原列表增加了一个元素。镜像的新列表也跟随增加了一个新元素。复制的列表则没有增加,它变成了一个独立的列表。
4.4 元组
一系列不可修改的元素,就叫元组
players = ('A', 'B')
print(players)
players = ('C', 'D', 'E')
print(players)
结果:
('A', 'B')
('C', 'D', 'E')
虽然元组不能修改其中的元素,但是可以给整个元组重新赋值。
元组的使用跟列表是一样的