Python 的列表

Posted on Fri, 26 Sep 2025 09:12:15 +0800 by LiangMingJian


前言

Python 的列表是一种序列(Sequence)结构,序列中的每个元素都会被分配一个整数来唯一确定它的位置, 这个整数就称为索引,索引总是从 0 开始,依此类推。

Python 的列表是支持修改内部元素的序列。与列表类似,但不支持修改的序列是元组,元组支持的操作与列表基本一致。

列表是以中括号 [] 包裹元素定义的;元组是以小括号 () 包裹元素定义的。

列表的创建

通过中括号 [] 包裹一定数据即可定义一个列表变量,包裹的多个数据使用逗号分隔,且数据项可以是不同的数据类型。

list1 = [1, '2', [3, 4], {5: 6}]

特别的,支持通过列表推导式来快速的创建列表。

形如 do-something for each in iteration 格式的语句称为一个列表推导式,其能便捷的对一个迭代体里面的每一个元素单独处理。

lista = [1, 2, 3]

# 列表推导式
list0 = [x * 2 for x in lista]

最后,还可以通过 list() 方法将其他数据类型,如字符串,元组,字典等转换为列表。

# 将字符串转换为每个字符组成的 list
list0 = list("abcdef")

# 将元组转化为 list
list1 = list((1, 2, 3))

# 将字典转换为 list,默认转换 key 到 list,以下方式是等同的
dic0 = {"key0": "val0", "key1": "val1"}
list2 = list(dic0)
list3 = list(dic0.keys())

# 将字典的值转换为 list
list4 = list(dic0.values())

列表的运算

列表支持加法与乘法运算,分别完成列表的合并与重复操作。

# 列表的加法
list0 = [0, 1, 2, 3, 4]
list1 = ['a', 'b', 'c'] + list0
print(list1)
# ['a', 'b‘, 'c', 0, 1, 2, 3, 4]

# 列表的乘法(重复)
list0 = ['*'] * 5
print(list0)
# ['*', '*', '*', '*', '*']

列表的访问

列表支持通过 list[索引] 的方式直接访问内部元素,索引是整数,支持正整数(正向索引,从左到右)和负整数(负向索引,从右到左)。

# 正向索引
list0 = [0, 1, 2, 3, 4]
print(list0[0])
# 0

# 负向索引
list1 = [0, 1, 2, 3, 4]
print(list1[-1])
# 4

列表也支持通过切片 list[start:stop:step] 的方式来批量获取内部元素。

详细的切片节省可查阅另一篇文章: 如何使用 Python 进行列表切片

list0 = [1, 2, 3, 4]

print(list0[0:3])  
# [1, 2, 3]

特别的,还可以使用方法 filter() 从列表中提取特定数据,或使用方法 enumerate() 同时遍历列表的索引和数据。

list0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
  
# 通过 filter 提取数据  
filter_obj = filter(lambda x: x % 2 == 0, list0)  
print(list(filter_obj))  
# 输出: [2, 4, 6, 8, 10]

# 通过 enumerate 枚举序号和元素
for key, value in enumerate(list0):  
    print(key, value)
# 将序号和数据依次输出

列表的统计

列表可以通过方法 len() 统计内部元素的数量。

list0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(len(list0))
# 10

通过方法 count(元素),可以单独统计列表中某个元素的数量。

list0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2]  

print(list0.count(2))
# 2

如果需要获取列表中不同种类元素的数量,可以将列表转换为集合自动剔除重复数据,然后再计算列表长度。

list0 = [1, 1, 2, 3]  

print(len(set(list0)))
# 3

特别的,如果列表中元素都是整型数据,可以直接使用 max()min() 方法获取列表中的最大最小值。

list0 = [1, 2, 3, 4, 5, 6]  

print(max(list0))  
print(min(list0))
# 6 和 1

列表的排序

列表可以通过 sort() 方法将内部元素进行排序,默认正序。支持传入 reverse=True 来实现反向排序。

特别的,反向排序还可以直接使用 reverse() 方法。

需要注意的事,上述两个排序方法都会直接修改原有列表,而不会重新生成一个列表

list0 = [1, 3, 2, 5, 4, 6]  

# 正向排序
list0.sort()  
print(list0)
# 此时列表为 [1, 2, 3, 4, 5, 6]

# 反向排序
list0.sort(reverse=True)  
print(list0)  
# 此时列表为 [6, 5, 4, 3, 2, 1]

# 再次反向排序
list0.reverse()  
print(list0)
# 此时列表为 [1, 2, 3, 4, 5, 6]

列表的插入

列表元素一般可以通过 append() 方法在尾部添加新元素。

当然,也支持通过 insert(索引, 数据) 方法在指定的索引位置插入,此时其他元素后移。

list0 = [0, 1, 2, 3]

# 在尾部添加元素
list0.append(100)
# [0, 1, 2, 3, 100]

# 在指定位置插入元素
list0.insert(1, 100)
# [0, 100, 1, 2, 3, 100]

特别的,如果想要一次性添加多个元素,可以使用 extend(迭代对象) 方法在列表的尾部一次性添加。

list0 = [0, 1, 2, 3]  

# 在列表尾部插入多个元素
list0.extend([99, 100])  
print(list0)
# [0, 1, 2, 3, 99, 100]

列表元素的删除

列表元素支持通过 del() 方法进行删除,需要注意,该方法操作的是列表本身。

list0 = [1, 2, 3, 4, 5]

# 删除元素
del(list0[0])
print(list0)
# [2, 3, 4, 5]

方法 del() 删除的元素是不返回值的,如果想要在删除时返回删除的元素,可以使用 pop(),在不传入索引时,默认抛出列表最后一个元素。

list0 = [1, 2, 3, 4, 5]

# pop()
data1 = list0.pop()
print(data1)  # 5
print(list0)  # [1, 2, 3, 4]

# pop(0)
data2 = list0.pop(0)
print(data2)  # 1
print(list0)  # [2, 3, 4]

特别的,如果想要依据元素的内容删除,可以使用方法 remove(value)。该方法会从头开始,逐个匹配元素,当匹配到与传入 value 相同的元素时,移除,如果元素不存在,则抛出错误。

list0 = [1, 2, 3, 4, 5]

# 删除 3
list0.remove(3)  
print(list0)
# [1, 2, 4, 5]

# 删除 6 
list0.remove(6)  
# ValueError: list.remove(x): x not in list

列表元素的判断

要判断一个元素是否在列表中,可以直接使用 in 和 not in 运算符。

list0 = [1, 2, 3, 4, 5]

print(1 in list0)      # True
print(1 not in list0)  # False

另外,还可以通过 index() 获取一个元素在列表中的位置,如果不存在则抛出错误,通过这个方法也可以判断元素是否在列表中。

list0 = [1, 2, 3, 4, 5]

print(list0.index(1))   # 0
print(list0.index(6))   # ValueError: 6 is not in list

拓展阅读:元组

元组是特别的列表,它兼容列表大部分操作,只是元组的元素是只读不可修改的。

tuple0 = (1, 2, 3)  

# 获取值
print(tuple0[0])  
# 1

# 禁止修改
tuple0[0] = 100  
# TypeError: 'tuple' object does not support item assignment

注意,元组如果只有一个元素,必须加上逗号,否则 Python 会将元素识别为值,而不是元组。

tuple0 = (1)  
tuple1 = (1,)  
  
print(tuple0)  # 1 整型
print(tuple1)  # (1,) 元组