十三、操作列表
2017-11-18 本文已影响33人
焰火青春
1、操作列表
1.1、遍历列表
有时需要对列表中的每个元素进行操作,不可能单独地写一行代码去取出每个元素,再进行操作,这样既增加了代码量也浪费了大多时间。
这时我们可以使用for 循环遍历列表每个元素,再进行操作:
# 遍历魔术师名单,对每个魔术师说几句话
magicians = ['alice', 'david', 'carolina']
for magician in magicians: # 在使用for循环时,可以使用单数复数的形式,如(for dog in dogs:)
print(magician.title() + ', that was a great trick!')
print("I can't wait to see your next trick, " + magician.title() + ".\n") # 在最后加个换行符,从而整洁地针对各位魔术师的消息编组
print('Thank you, everyone . That was a great magic show!') # 循环外
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you, everyone . That was a great magic show!
1.2、创建数字列表
使用range()函数可以生成一系列数字,再将数字存储到列表中。
1.2.1、使用range()创建数字列表
可使用list()将range()的结果直接转换为列表。
numbers = list(range(1, 6))
numbers_1 = list(range(2, 11, 2)) # range()还可以指定步长,第一二个参数为数字区间,第三个为递进的不长
print(numbers)
print(numbers_1)
[1,2,3,4,5]
[2,4,6,8,10]
函数range()几乎可以闯将任何需要的数字集,如何创建一个列表:
# 创建一个1-10的10个整数的平方的列表
squares = []
for value in range(1, 11):
# square = value**2 # 使用临时变量square,将每个数的平方存储在其中
# squares.append(square) # 再通过append()方法将元素添加到列表squares末尾,这两步可以简写为如下一步
squares.append(value**2) # 简写
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用临时变量,有时可以使代码更易读,但也会增加代码量,所以在写代码时,首先应该考虑编写清晰易懂且能完成所需功能的代码,等到审核代码时,再采用更高效的方法。
1.2.2、对数字列表进行简单计算
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits) # 找出列表中最小数
0
max(digits) # 找出列表中最大数
9
sum(digits) # 对列表中的数求和
45
1.3、列表解析
列表解析也可以称为列表推导式,它可以将原有的三四行的代码简写成一行,实现同样的效果,其格式为将for 循环和创建新元素的代码合并成一行,并自动添加新元素。
squares = [value**2 for value in range(1, 11)]
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 首先定义一个表达式:value**2
# 用于生成要存储到列表中的值,编写一个for循环,用于给表达式提供值
a = [i for i in range(10) if not (i % 2) and (i % 3)] # not等级高于and
print(a) # 能被2整除的数(0,2,4,6,8)为真,不能被3整除的数(1,2,4,5,7,8)为真
# 都为真则只有2、4、8时
# 相当于
a = []
for i in range(10):
if i % 2 == 0 and i % 3 != 0:
a.append(i)
print(a)
[2, 4, 8]
# 创建一个列表1-20(含20)内的多有奇数
a = [i for i in range(1, 21, 2)]
print(a)
# 创建一个列表,包含3-30内所以能被3整除的数字,并使用for循环打印
a = [i for i in range(3, 30) if (i % 3 == 0)]
print(a)
# 创建一个1-10所有整数的立方的列表,并使用for循环打印
a = [i**3 for i in range(1, 11)]
print(a)
1.4、列表切片
在前面学会了访问列表的单个元素,而使用列表切片可访问列表的部分或者全部元素。
# 采取元素索引值的方式访问,含开始索引值,不含结束索引值
lists = [1, 2, 3, 4, 5]
print(lists[0:3]) # 访问0-2的元素
print(lists[1:4]) # 访问1-3的元素
print(lists[:]) # 访问整个列表元素
print(lists[2:]) # 访问2到列表末尾的所有元素
print(lists[:4]) # 访问0到3的所有元素
print(lists[-3:]) # 访问倒数三个元素
[1, 2, 3]
[2, 3, 4]
[1, 2, 3, 4, 5]
[3, 4, 5]
[1, 2, 3, 4]
[3, 4, 5]
1.4.1、遍历切片
要遍历列表的部分元素,可使用for循环。
lists = [1, 2, 3, 4, 5]
for i in lists[-3:]:
print(a)
3
4
5
1.4.2、复制列表
我们经常需要根据既有列表创建全新的列表,复制列表可以分为两种:
- 列表切片
复制的新的列表为原有列表的副本,不会随原列表改变而改变
- 直接赋值
赋值的新列表,会虽原列表改变而改变
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:] # 列表切片
friend_food = my_foods # 赋值
my_foods.append('fish') # 原列表添加新元素
print(my_foods)
print(friend_foods)
print(friend_food)
['pizza', 'falafel', 'carrot cake', 'fish']
['pizza', 'falafel', 'carrot cake'] # 不变
['pizza', 'falafel', 'carrot cake', 'fish']
练习
# 使用切片打印列表前三个元素
my_foods = ['pizza', 'falafel', 'carrot cake', 'fish']
print('The first three items in the list are:')
print(my_foods[:3])
# 使用切片打印列表中的三个元素
print('three items from the middle of the list are:')
print(my_foods[1:4])
# 复制列表,并把复制的列表存储到一个新变量new_nums中,再给每个列表新添加一个元素,并使用for循环打印列表,看是否有什么不同
nums = [1, 2, 3, 4, 5, 6]
new_nums = nums[:]
nums.append(7)
new_nums.append(8)
a = []
for num in nums:
a.append(num)
print('My favorite numbers was: ', a)
b = []
for new_num in new_nums:
b.append(new_num)
print('My new favorite numbers was: ', b)
My favorite numbers was: [1, 2, 3, 4, 5, 6, 7]
My new favorite numbers was: [1, 2, 3, 4, 5, 6, 8]