列表——list
1. 列表是什么
-
定义:列表是由一系列按特定顺序排列的元素组成,用 [ ] 来标识
-
语法格式:listname = [ele1, ele2, ele3, .....]
e.g # 创建一个字母列表 letters = ['a', 'b', 'c', 'd'] # 也可以创建一个空的列表 letter = []
-
列表是有序的集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可
-
索引是从0开始,最后一个列表元素索引为-1,因此可以在不知道列表长度时,访问最后的元素
# 打印字母列表中的第一个元素 print(letters[0]) #对列表中字符串类型 #首字母大写 letters[0].title() #全部大写 letters[0].upper() #全部小写 letters[0].lower() # 打印整个列表 print(letters)
-
使用+可以将的字符串类型进行拼接
2. 修改、添加、删除元素
-
追加:listname.append(data)
listname += [.....]
-
插入:listname.insert(index, data)
注意:insert()方法需要两个参数(take exactly 2 arguments)
-
替换 :listname[index] = data
-
删除:
- del(永久删除)
del listname[index]
- pop()(按照索引删除)
listname.pop(index)
注意:
如果不指定索引,则默认删除最后一个元素
- remove()(按照值删除)
listname.remove(data)
注意:
方法remove()只删除第一个指定的值,如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值
注意:
后两种方法可以将删除的某个元素保存到某个变量,继续使用
3. 对列表进行排序
-
sort()(永久排序)
- (降序)正向排序
listname().sort()
- 反向排序
加入参数 reverse = True
listname.sort(reverse = True)
-
sorted(临时排序)
sorted(listname)
注意:
临时排序相当于拷贝一份,显示一次排序结果,但原来列表中的排列顺序并未发生改变
4. 倒着打印列表
listname.reverse()
注意:
reverse()不是指按与字母顺序相反的顺序排列列表元素,只是反转列表元素
reverse()永久的修改列表,但再次使用reverse()即可将列表还原
5. 确定列表的长度
使用函数 len(listname) 确定列表的长度
对列表的操作
- 在游戏中,可能需要将每个界面元素平移相同的距离;
-
对于包含数字的列表,可能需要对每个元素执行相同的统计运算;
- 在网站中,可能需要显示文章列表中的每个标题
- 需要对列表中的每个元素都执行相同的操作时,可使用Python中的for循环
1. 遍历整个列表
假设有一个魔术师列表:
magicians = ['alice', 'david', 'carolina']
使用for循环来打印魔术师名单中的名字:
for magician in magicians:
print(magician)
解释:
第一行代码让Python从列表magicians中取出一个名字,并将其存储在变量magician中。最后,我们让Python打印前面存储在变量magician中的名字。继续循环,直到列表中没有其他的值了。
2. 在循环中执行更多的操作
for magician in magicians: print(magician.title() + ', that was a great trick!') print('Thank you, everone. That was a great magic show!')
3. 创建数值列表
在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。
在数据可视化中,处理几乎都是由数字(如温度,距离,人口数量,经度和纬度等)组成的集合。
列表非常适合用于存储数字集合,而python提供了很多工具,可帮助你高效地处理数字列表
-
range()函数(生成一系列数字)
for value in range(1, 5): print(value) ''' 打印结果: 1 2 3 4 '''
上述代码好像应该打印数字1~5,但实际上它不会打印数字5,函数range()让python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)
*要打印数字1~5,需要使用range(1, 6):
for value in range(1, 6): print(value) """ 运行结果: 1 2 3 4 5 """
-
使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转换为列表,如果range()作为list()的参数,输出将为一个数字列表。
numbers = list(range(1, 6)) print(numbers) """ 运行结果: [1, 2, 3, 4, 5] """
使用range()时,还可以指定步长
even_numbers = list(range(2, 11, 2)) print(even_numbers) """ 运行结果: [2, 4, 6, 8, 10] """
例如,创建一个空列表,其中包含1~10的平方,在python中两个星号(**)代表乘方运算
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] """
4.max(),min(),sum()
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] # 求digits的最大值 max(digits) # 求digits的最小值 min(digits) # 求和 sum(digits)
5. 列表推导式
前面介绍的生成列表squares的方式包含三四行代码,而列表推导式让你只需写一行代码就能生成这样的列表。
列表推导式将for循环和创建新元素的代码合并成一行,并自动附加新元素
# 注意:for循环后面没有冒号 squares = [value**2 for value in range(1, 11)] print(squares)
注意:
要使用这种语法,首先指定一个描述性的列表名,如squares;
然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式value**2,它计算平方值。
接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。
- 例如:使用列表推导式通过函数range()指定第三个参数创建一个列表,其中包含1~20的奇数;在使用for循环将这个列表中的数字打印出来
odd_numbers = [value for value in range(1, 21, 2)] print(odd_numbers) ''' 运行结果: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] '''
6. 使用列表的一部分(切片)
要使用切片,可指定要使用的第一个元素和最后一个元素的索引
与函数range()一样,Python在到达你指定的第二个索引出停止,不会打印最后一个元素的索引
-
切片
有一个运动员列表:
players = ['a', 'b', 'c', 'd','e', 'f'] # 打印第1~第2个元素 print(players[0:2]) # 打印第2~第4个元素 print(players[1:4]) # 没有指定起始索引,默认从头开始 print(players[:4]) # 没有指定末尾索引,默认到结束 print(players[3:]) # 打印最后3个元素 print(players[-3:])
-
遍历切片
如果要遍历列表的部分元素,可在for循环中使用切片
下面代码没有遍历整个列表,只遍历前三个元素
players = ['a', 'b', 'c', 'd','e', 'f'] for player in players[:3]: print(player) ''' 运行结果: a b c '''
在很多情况下,切片都很有用。
编写游戏时,你可以在玩家退出游戏时将其最终得分加入到一个列表中。然后,为获取该玩家的三个最高分,你可以将列表按降序排列,再创建一个只包含前三个得分的切片。
处理数据时,可使用切片来进行批量处理
编写web应用程序时,可使用切片来分页显示信息,并在每页显示数量合适的信息
-
复制列表
你经常需要根据既有列表创建全新的列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引( [:] )
my_foods = ['a', 'b', 'c'] friend_foods = my_foods[:] ''' 在不使用切片的情况下,这行不通 这里将my_foods赋给friend_foods,而不是将my_foods的副本存储到friend_foods 这里my_foods和friend_foods指向同一个列表 ''' friend_foods = my_foods