Skip to content

列表

1. 列表的定义

列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters、digits或names)是个不错的主意。

在Python中,用方括号([​])来表示列表,并用逗号来分隔其中的元素。下面是一个简单的列表示例,这个列表包含几种自行车:

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles) # ['trek', 'cannondale', 'redline', 'specialized']

如果你让Python将列表打印出来,Python将打印列表的内部表示,包括方括号:

2. 查看|修改

2.1. 查看

列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。

例如,下面的代码从列表bicycles中提取第一款自行车:

python
print(bicycles[0]) # trek
print(bicycles[-1]) # specialized
  • 索引从0而不是1开始
  • 访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1, 可以访问最后一个元素。索引-2返回倒数第二个列表元素
2.2. 修改

要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
bicycles[0] = 'ducati'
print(bicycles) # ['ducati', 'cannondale', 'redline', 'specialized']

3. 添加

3.1. 在列表末尾添加元素

使用方法append()可在列表末尾添加新元素。append()将元素添加到列表末尾,而不影响列表中的其他所有元素。

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
bicycles.append('ducati')
print(bicycles) # ['trek', 'cannondale', 'redline', 'specialized', 'ducati']
3.2. 在列表中插入元素

使用方法insert()可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
bicycles.insert(0, 'ducati')
print(bicycles) # ['ducati', 'trek', 'cannondale', 'redline', 'specialized']
insert
[ ɪnˈsɜːrt ]
vt.插入;嵌入

4. 删除

4.1. 使用del语句删除元素

如果知道要删除的元素在列表中的位置,可使用del语句

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
del bicycles[0]
print(bicycles) # ['cannondale', 'redline', 'specialized']
4.2. 使用方法pop()弹出元素

方法pop()可删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
popped_bicycle = bicycles.pop()
print(bicycles) # ['trek', 'cannondale', 'redline']
print(popped_bicycle) # specialized
pop
[ pɑːp ]
vt.弹出;删除
4.3. 弹出列表中任何位置处的元素

实际上,你可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
first_bicycle = bicycles.pop(0)
print(bicycles) # ['cannondale', 'redline', 'specialized']
print(first_bicycle) # trek
4.4. 根据值删除元素

如果知道要删除的元素的值,可使用方法remove()

python
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
bicycles.remove('specialized')
print(bicycles) # ['trek', 'cannondale', 'redline']

5. 排序

5.1. 永久性排序方法sort()

Python方法sort()可对列表进行永久性排序。

  • 默认按字幕顺序排序
python
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars) # ['audi', 'bmw', 'subaru', 'toyota']
  • reverse=True 按字母顺序相反的顺序排序
python
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars) # ['toyota', 'subaru', 'bmw', 'audi']

5.2. 临时排序函数sorted()

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。函数sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

python
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(sorted(cars)) # ['audi', 'bmw', 'subaru', 'toyota']
print(cars) # ['bmw', 'audi', 'toyota', 'subaru']

5.3. 倒着打印列表

要反转列表元素的排列顺序,可使用方法reverse()reverse()不是按字母顺序相反的顺序排列列表元素,而只是反转列表的排列顺序。

python
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars) # ['subaru', 'toyota', 'audi', 'bmw']
reverse
[ rɪˈvɜːrs ]
vt.反转;倒置

5.4. 确定列表的长度

使用函数len()可快速获悉列表的长度。

python
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars)) # 4

6. 遍历

列表最重要的方法,就是遍历

for循环遍历列表

python
cars = ['bmw', 'audi', 'toyota', 'subaru']
for car in cars:
    print(car)
# 输出:
# bmw
# audi
# toyota
# subaru

6.1 缩进

和javascript 用打大括号表示代码块不通,python 用缩进表示代码块。

未缩进的代码会报错
python
cars = ['bmw', 'audi', 'toyota', 'subaru']
for car in cars:
print(car)
如果你不小心缩进了无需缩进的代码行,Python将指出这一点:
python
message = "Hello Python world!"
    print(message) ❶

报错

python
  File "hello_world.py",line 2
    print(message)
    ^
IndentationError:unexpected indent

为避免意外缩进错误,请只缩进需要缩进的代码, 只有要在for循环中对每个元素执行的代码行才需要缩进。

7. range() 数字遍历

range
[ ræŋg ]
n.范围;范围值;

Python函数range()让你能够轻松地生成一系列的数字。例如,可以像下面这样使用函数range()来打印一系列的数字:

函数range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)​。

python
for number in range(1,6):
    print(number)

输出:

1
2
3
4
5

使用range()创建数字列表

python
numbers = list(range(1,6))
print(numbers) # [1, 2, 3, 4, 5]

使用函数range()时,还可指定步长。例如,下面的代码打印1~10内的偶数

python
even_numbers = list(range(2,11,2))
print(even_numbers) # [2, 4, 6, 8, 10]

8. 数字数组统计

  • min() 最小值
  • max() 最大值
  • sum() 总和
python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(numbers)) # 0
print(max(numbers)) # 9
print(sum(numbers)) # 45

9. 列表解析

列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。

python
squares = [value**2 for value in range(1,11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

10. 切片

切片是指从列表中提取一部分元素。不改变原列表。

python
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3]) # ['charles', 'martina', 'michael']
print(players) # ['charles', 'martina', 'michael', 'florence', 'eli']
players
[ plærs ]
n. (商业或政治方面的)参与者,竞争者,玩家;

如果你没有指定第一个索引,Python将自动从列表开头开始:0

如果你没有指定第2个索引,Python将自动列表结束

10.1 遍历切片

如果要遍历列表的部分元素,可在for循环中使用切片。

python
players = ['charles', 'martina', 'michael', 'florence', 'eli']
for player in players[0:3]
  print(player.title())

11. 复制列表

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。

python
players = ['charles', 'martina', 'michael', 'florence', 'eli']
players_copy = players[:]
print(players) # ['charles', 'martina', 'michael', 'florence', 'eli']
print(players_copy) # ['charles', 'martina', 'michael', 'florence', 'eli']

这种复制方法非常方便,因为它让你能够在不影响原始列表的情况下修改副本。

python
players_copy.append('张三')
print(players_copy) # ['charles', 'martina', 'michael', 'florence', 'eli', '张三']
print(players) # ['charles', 'martina', 'michael', 'florence', 'eli']

不能用players_copy = players复制列表,这将导致两个变量都指向同一个列表。

python
players = ['charles', 'martina', 'michael', 'florence', 'eli']
players_copy = players
players_copy.append('张三')
print(players_copy) # ['charles', 'martina', 'michael', 'florence', 'eli', '张三']
print(players) # ['charles', 'martina', 'michael', 'florence', 'eli', '张三']

12. 元组

元组是一种不可变的列表,即你不能修改元组的元素。元组使用圆括号而不是方括号来标识。

如:

python
dimensions = (200, 50)
print(dimensions) # (200, 50)

# 可查看
print(dimensions[0]) # 200

# 可遍历
for dimension in dimensions:
    print(dimension)

12.1 修改元组

虽然不能修改元组的元素,但可以给存储元组的变量赋值

python
dimensions = (200, 50)
print(dimensions) # (200, 50)
# 修改
dimensions = (400, 100)
print(dimensions) # (400, 100)

京ICP备2024093538号-1