python 学习之列表
1感言
允许一切发生,就会更平和与宽容,更容易和自己和解。
–来自杨小姐最近很喜欢的话
我们好像什么都做不了,我们又好像什么都可以去做。
–老俊俊的俊言俊语
2引言
列表 由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字 0 ~ 9 或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
在 Python 中,用方括号( [] )表示列表,并用 逗号 分隔其中的元素。
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
['trek', 'cannondale', 'redline', 'specialized']
3列表基础
访问列表元素
要访问列表的任意元素,只需将该元素的位置(索引 )告诉 Python 即可,当你请求获取列表元素时,Python 只返回该元素,而不包括方括号:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
trek
当你请求获取列表元素时,Python 只返回该元素,而不包括方括号:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
Trek
索引从 0 而不是 1 开始
在 Python 中,第一个列表元素的索引为 0,而不是 1,第二个列表元素的索引为 1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减 1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引 3:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])
cannondale
specialized
Python 为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让 Python 返回最后一个列表元素,索引-2 返回倒数第二个列表元素,索引-3 返回倒数第三个列表元素,依此类推:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
specialized
使用列表中的各个值
可以像使用其他变量一样使用列表中的各个值。例如,可以使用 f 字符串根据列表中的值来创建消息:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)
My first bicycle was a Trek.
4修改、添加和删除元素
修改列表元素
修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
在列表中添加元素
在列表末尾添加元素:
在列表中添加新元素时,最简单的方式是将元素附加 (append)到列表。给列表附加元素时,它将添加到列表末尾:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
方法 append() 让动态地创建列表易如反掌。例如,你可以先创建一个空列表,再使用一系列函数调用 append() 来添加元素。下面来创建一个空列表,再在其中添加元素’honda’ 、’yamaha’ 和’suzuki’ :
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
['honda', 'yamaha', 'suzuki']
在列表中插入元素:
使用方法 insert() 可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值:
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
['ducati', 'honda', 'yamaha', 'suzuki']
从列表中删除元素:
如果知道要删除的元素在列表中的位置,可使用 del 语句:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
使用 del 可删除任意位置处的列表元素,条件是知道其索引。例如,下面演示了如何删除前述列表中的第二个元素 ‘yamaha’ :
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)
['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']
方法 pop() 删除列表末尾的元素,并让你能够接着使用它:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
实际上,可以使用 pop() 来删除列表中任意位置的元素,只需在圆括号中指定要删除元素的索引即可:
motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")
The first motorcycle I owned was a Honda.
有时候,你不知道要从列表中删除的值所处的位置。如果只知道要删除的元素的值,可使用方法 remove() :
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
注意: 方法 remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来确保将每个值都删除。
5组织列表
有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。Python 提供了很多组织列表的方式,可根据具体情况选用。
sort() 对列表永久排序
Python 方法 sort() 让你能够较为轻松地对列表进行排序:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
['audi', 'bmw', 'subaru', 'toyota']
还可以按与字母顺序相反的顺序排列列表元素,只需向 sort() 方法传递参数 reverse=True 即可:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
['toyota', 'subaru', 'bmw', 'audi']
使用函数 sorted() 对列表临时排序
要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数 sorted() 。函数 sorted() 让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)
print("nHere is the sorted list:")
print(sorted(cars))
print("nHere is the original list again:")
print(cars)
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']
倒着打印列表
要反转列表元素的排列顺序,可使用方法 reverse() :
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
方法 reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需对列表再次调用 reverse() 即可。
确定列表的长度
使用函数 len() 可快速获悉列表的长度:
cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)
4
6操作列表
遍历整个列表
你经常需要遍历列表的所有元素,对每个元素执行相同的操作,通过使用 for 循环 ,可以让 Python 去处理这些问题:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
alice
david
carolina
刚开始使用循环时请牢记,对列表中的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素。如果列表包含一百万个元素,Python 就重复执行指定的步骤一百万次,且通常速度非常快。
在 for 循环中执行更多操作
在 for 循环中,可对每个元素执行任何操作:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
在 for 循环中,想包含多少行代码都可以。在代码行 for magician in magicians
后面,每个缩进的代码行都是循环的一部分,将针对列表中的每个值都执行一次。因此,可对列表中的每个值执行任意次数的操作:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see your next trick, {magician.title()}.n")
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.
在 for 循环结束后执行一些操作
在 for 循环后面,没有缩进的代码都只执行一次,不会重复执行:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"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!
你在前面看到了,开头两个函数调用 print() 针对列表中的每位魔术师重复执行。然而,第三个函数调用 print() 没有缩进,因此只执行一次。
因此在写循环时应该尽量 避免缩进错误 或者 不必要的缩进。
创建数值列表
创建数值列表:
Python 函数 range() 让你能够轻松地生成一系列数。例如,可以像下面这样使用函数 range() 来打印一系列数:
for value in range(1, 5):
print(value)
1
2
3
4
在这个示例中,range() 只打印数 1 ~ 4。这是编程语言中常见的 差一行为 的结果。函数 range() 让 Python 从指定的第一个值开始数,并在到达你指定的第二个值时停止。因为它在第二个值处停止,所以输出不包含该值(这里为 5)。
要打印数 1 ~ 5,需要使用 range(1,6) 。使用 range() 时,如果输出不符合预期,请尝试将指定的值加 1 或减 1。
使用 range() 创建数字列表:
要创建数字列表,可使用函数 list() 将 range() 的结果直接转换为列表。如果将 range() 作为 list() 的参数,输出将是一个数字列表:
numbers = list(range(1, 6))
print(numbers)
[1, 2, 3, 4, 5]
使用函数 range() 时,还可指定步长。为此,可给这个函数指定第三个参数,Python 将根据这个步长来生成数:
even_numbers = list(range(2, 11, 2))
print(even_numbers)
[2, 4, 6, 8, 10]
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]
对数字列表执行简单的统计计算:
有几个专门用于处理数字列表的 Python 函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits)
0
max(digits)
9
sum(digits)
45
列表解析:
前面介绍的生成列表 squares 的方式包含三四行代码,而列表解析让你只需编写一行代码就能生成这样的列表。列表解析 将 for 循环和创建新元素的代码合并成一行,并自动附加新元素:
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 语句末尾没有冒号。
使用列表的一部分
切片:
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数 range() 一样,Python 在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引 0 和 3,这将返回索引为 0、1 和 2 的元素:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
['charles', 'martina', 'michael']
你可以生成列表的任意子集。例如,如果要提取列表的第二、第三和第四个元素,可将起始索引指定为 1 ,并将终止索引指定为 4:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])
['martina', 'michael', 'florence']
如果没有指定第一个索引,Python 将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
['charles', 'martina', 'michael', 'florence']
要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素到列表末尾的所有元素,可将起始索引指定为 2 ,并省略终止索引:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
['michael', 'florence', 'eli']
如果要输出名单上的最后三名队员,可使用切片 players[-3:] :
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
['michael', 'florence', 'eli']
遍历切片:
如果要遍历列表的部分元素,可在 for 循环中使用切片:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
Here are the first three players on my team:
Charles
Martina
Michael
复制列表:
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] ):
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("nMy friend's favorite foods are:")
print(friend_foods)
My favorite foods are:
['pizza', 'falafel', 'carrot cake']
My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']
7元组
有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python 将不能修改的值称为不可变的 ,而不可变的列表被称为元组。
元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样:
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
200
50
下面来尝试修改元组 dimensions 的一个元素,看看结果如何:
dimensions = (200, 50)
dimensions[0] = 250
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-43-258c8b06eee2> in <module>
1 dimensions = (200, 50)
----> 2 dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
注意: 严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:
my_t = (3,)
遍历元组中的所有值
像列表一样,也可以使用 for 循环来遍历元组中的所有值:
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)
200
50
修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions = (400, 100)
print("nModified dimensions:")
for dimension in dimensions:
print(dimension)
Original dimensions:
200
50
Modified dimensions:
400
100

欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦,数据代码已上传至QQ群,欢迎加入下载。
群二维码:

老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀…
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!