Python学习笔记2—列表的进阶操作
1. 使用for循环进行列表遍历
假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来,则可以用for 循环进行遍历并打印,如:
1 | magicians = ['alice', 'david', 'carolina'] |
这段代码从列表magicians中取出一个名字,并将其存储在变量magician中,进而将其打印,其输出结果如下:
1 | alice |
2. 创建数值列表
2.1 使用函数range()
使用函数range()可以生成一些数字,如:
1 | for value in range(1,5): |
则打印的结果为:
1 | 1 |
需要注意的是,range(1,5)只是打印数字1-4,并且range(1,5)并不会生成一个包含数字1-4的列表。
2.2 使用函数range()和函数list()创建数值列表
上面提到了使用range()并不会生成列表,要相将其结果直接转换为列表,可以使用函数list(),如:
1 | numbers = list(range(1,6)) |
则此时的输出结果为一个包含数字1~5的数值列表:
1 | [1, 2, 3, 4, 5] |
使用函数range()时,还可指定步长。例如,下面的代码打印1~10内的偶数:
1 | even_numbers = list(range(2,11,2)) |
在这段代码中,函数range()从2开始数,然后不断地加2,直到达到或超过终值11,因此输出如下:
1 | [2, 4, 6, 8, 10] |
3. 列表解析
列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素,如可以使用以下方法快速生成一组平方数列表:
1 | squares = [value**2 for value in range(1,11)] |
输出结果为:
1 | [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
4. 列表的切片
4.1 切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引,与函数range()一样,切片的区间同样是左闭右开的,下面的示例处理的是一个运动队成员列表:
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
此处将原列表的前三个元素切片,输出的仍然是一个列表:
1 | ['charles', 'martina', 'michael'] |
如果没有指定第一个索引,则Python将自动从列表开头开始:
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
此时输出的是索引为0~3的列表中的元素组成的新列表:
1 | ['charles', 'martina', 'michael', 'florence'] |
要让切片终止于末尾,也可以用类似的语法,不指定后面的索引:
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
则此时输出的为原列表中索引为2及其后面的所有元素组成的新列表:
1 | ['michael', 'florence', 'eli'] |
4.2 遍历切片
由于列表的切片也是列表,因此其遍历方法和列表的遍历方法相同,如:
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
此处遍历的是列表中的前3个元素:
1 | Here are the first three players on my team: |
4.3 复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表,如:
1 | my_foods = ['pizza', 'falafel', 'carrot cake'] |
这段代码中首先创建了一个名为my_foods的食品列表,然后创建了一个名为friend_foods的新列表,在不指定任何引的情况下从列表my_foods中提取一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中。打印每个列表后,发现它们包含的食品相同:
1 | My favorite foods are: |
为核实确实有两个列表,下面在每个列表中都添加一种食品,并核实每个列表都记录了相应人员喜欢的食品:
1 | my_foods = ['pizza', 'falafel', 'carrot cake'] |
此时的输出结果为:
1 | My favorite foods are: |
可以看到,原列表的输出与复制后列表的输出结果不同,说明原列表与复制的列表是互相独立的如果我们只是简单地将my_foods赋给friend_foods,就不能得到两个列表,如下所示:
1 | my_foods = ['pizza', 'falafel', 'carrot cake'] |
此时的输出结果为:
1 | My favorite foods are: |
可以看到这两个列表是完全相同的,对其中一个列表进行操作也会导致另一个列表发生变化。
5. 使用if语句判断列表是否非空
首先看下面一段代码:
1 | requested_toppings = [] |
在这段代码中,首先创建了一个空列表,其中不包含任何元素,然后对其用if语句进行了检查,若列表非空,则会打印出列表中的所有元素,否则返回else处打印的语句:
1 | Are you sure you want a plain pizza? |
6. 使用关键字in或not in检查特定元素是否在列表中
要判断特定的值是否已包含在列表中,可使用关键字in:
1 | requested_toppings = ['mushrooms', 'onions', 'pineapple'] |
此时由于列表中确实含有元素’mushrooms’,因此会返回True,而’pepperoni’不在列表元素中,因此会返回False。