操作列表
经常会有遍历列表的所有元素,对每个元素执行相同的操作
eg: 在游戏中可能需要将每个界面元素平移相同的距离;
对于包含数字的列表,可能需要对每个元素执行相同的统计运算
在网站中,可能需要显示文章列表中的每个标题等等
使用for循环
eg:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
============================================
output:
alice
david
carolina
========================================
定义一个for循环,让列表magicians中取出一个名字,
并将其存储在变量magician中,最后,让python打印前面存储
到变量magician中的名字
对列表中的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素
如果列表包含一百万个元素,Python就重复执行指定的步骤一百万次,且通常
速度非常快。
编写for循环时,对于用于存储列表中每个值得临时变量,可指定任何名称。
but 选择描述单个列表元素的有意义的名称大有帮助。
eg:对于小猫列表、小狗列表和一般性列表,像下列编写for循环是一个不错的选择
for cat in cats:
for dog in dogs:
for item in list_of_items:
4.1 创建数值列表:
列表非常适用存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表
4.1.1 使用函数range()
Python函数range()让你轻松地生成一系列的数字,
eg:
for value in range(1, 5):
print(value)
========================
1
2
3
4
=====================
python的特性是左闭右开
4.1.2 使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转换为列表。
如果将range()作为list()的参数,输出将为一个数字列表。
将数字转换为一个列表,可使用list():
numbers = list(range(1, 6))
print(numbers)
===========================
output:
[1, 2, 3, 4, 5]
===========================
使用函数range() 可指定步长
eg:
打印1~10内的偶数:
even_numbers = list(range(2, 11, 2))
print(even_numbers)
======
output:
[2, 4, 6, 8, 10]
使用函数range()几乎能创建任何需要的数字集:
eg:
如何创建前10个整数的平方呢?
两个星号(**)表示乘方运算
eg:
squares = []
for value in range(1, 11):
squares.append(value**2)
print(squares)
==========
output:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
=====================================
4.1.3 对数字列表执行简单的统计计算
有专门用于处理数字列表的Python函数
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(min(digits))
print(max(digits))
print(sum(digits))
===================
output:
1
10
55
=====================
4.1.4 列表解析
前面介绍的生成列表squares的方式包含三四行代码,
列表解析让你只需编写一行代码就能生成相同的列表
列表解析将for循环和创建新元素的代码合并成一行,
并自动附加新元素
eg:
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语句末尾没有冒号
当觉得编写三四行代码来生成列表有点繁复时,就应考虑创建列表解析
4.2 使用列表的一部分
4.2.1 切片
要创建切片, 可指定要使用的第一元素的索引和最后一个元素的索引加1,
与函数range()一样,
eg:
输出列表中的前三个元素,需要指定索引0~3, 这将输出分别为0、1、2的元素
eg:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
print(players[:4])
print(players[2:])
print(players[-3:])
print(players[:])
=======================
output:
['charles', 'martina', 'michael']
['charles', 'martina', 'michael', 'florence']
['michael', 'florence', 'eli']
['michael', 'florence', 'eli']
['charles', 'martina', 'michael', 'florence', 'eli']
======================
players[:4]没有指定第一个索引,python将自动从列表开头开始
要让切片终止于列表末尾,也可使用类似的语法,
players[2:]从第三个元素到列表末尾的所有元素
负数索引返回离列表末尾相应距离的元素,因此可以输出列表末尾的任何切片
输出最后三个元素,使用切片players[-3:]
players[:]输出从开头到结尾
4.2.2 遍历切片
如遍历列表的部分元素,可在for循环中使用切片。
eg:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
for player in players[:3]:
print(player.title())
=======
output:
Charles
Martina
Michael
=========
这里只遍历前三个元素:
在很多情况下,切片都很有用,
eg:编写游戏时,可以在玩家退出游戏时将其最终得分加入到一个列表中
为获得三个最高得分,可将列表按降序排列,再创建一个只包含前三个得分
的切片,处理数据时,可使用切片进行批量处理,编写Web应用程序时,
可使用切片来分页显示信息,并将每页显示数量合适的信息
4.2.2 复制列表
要复制列表,可创建一个包含整个列表的切片,
eg:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print(my_foods)
print(friend_foods)
my_foods.append('cannoli')
friend_foods.append('ice cream')
print(my_foods)
print(friend_foods)
=====
output:
['pizza', 'falafel', 'carrot cake']
['pizza', 'falafel', 'carrot cake']
['pizza', 'falafel', 'carrot cake', 'cannoli']
['pizza', 'falafel', 'carrot cake', 'ice cream']
=======================
在不指定任何索引的情况下从列表my_foods中提取一个切片,从而创建这个列表的副本
再将副本存储到变量friend_foods中,打印每个列表后,发现包含元素相同
添加元素发现都包含在正确的列表中
如果只是简单地将列表赋值给另一个列表将不能得到两个列表
eg:
不适用切片的情况下复制列表
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods
print(my_foods)
print(friend_foods)
my_foods.append('cannoli')
friend_foods.append('ice cream')
print(my_foods)
print(friend_foods)
=====================
output:
['pizza', 'falafel', 'carrot cake']
['pizza', 'falafel', 'carrot cake']
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
=======================
这种语法实际上是让python将新变量friend_foods关联到包含在my_friends中的列表
因此这两个变量都指向同一个列表
输出表明,这两个列表是相同的