Vanson's Eternal Blog

Python中的List列表常见和高级用法

Python list.png
Published on
/9 mins read/---

创建列表

可以使用方括号 [] 或 list() 构造函数来创建列表。

# 使用方括号创建列表
my_list = [1, 2, 3, 4, 5]
print(my_list)  # 输出: [1, 2, 3, 4, 5]
 
# 使用 list() 构造函数创建列表
another_list = list((1, 2, 3, 4, 5))
print(another_list)  # 输出: [1, 2, 3, 4, 5]
 

访问列表元素

可以通过索引访问列表中的元素。

 
my_list = [1, 2, 3, 4, 5]
print(my_list[0])  # 输出: 1
print(my_list[-1])  # 输出: 5
 

切片操作

切片操作可以获取列表的一个子集。

 
my_list = [1, 2, 3, 4, 5]
print(my_list[1:3])  # 输出: [2, 3]
print(my_list[:3])   # 输出: [1, 2, 3]
print(my_list[3:])   # 输出: [4, 5]
print(my_list[::2])  # 输出: [1, 3, 5]
 

添加元素

可以使用 append()、extend() 和 insert() 方法添加元素。

 
my_list = [1, 2, 3]
 
# 使用 append() 添加单个元素
my_list.append(4)
print(my_list)  # 输出: [1, 2, 3, 4]
 
# 使用 extend() 添加多个元素
my_list.extend([5, 6])
print(my_list)  # 输出: [1, 2, 3, 4, 5, 6]
 
# 使用 insert() 在指定位置插入元素
my_list.insert(2, 'a')
print(my_list)  # 输出: [1, 2, 'a', 3, 4, 5, 6]
 

删除元素

可以使用 remove()、pop() 和 del 删除元素。

 
my_list = [1, 2, 3, 4, 5]
 
# 使用 remove() 删除指定值的元素
my_list.remove(3)
print(my_list)  # 输出: [1, 2, 4, 5]
 
# 使用 pop() 删除并返回指定索引的元素
popped_element = my_list.pop(1)
print(popped_element)  # 输出: 2
print(my_list)  # 输出: [1, 4, 5]
 
# 使用 del 删除指定索引的元素
del my_list[1]
print(my_list)  # 输出: [1, 5]
 

查找元素

可以使用 index() 和 in 操作符查找元素。

 
my_list = [1, 2, 3, 4, 5]
 
# 使用 index() 查找元素的索引
print(my_list.index(3))  # 输出: 2
 
# 使用 in 检查元素是否存在
print(3 in my_list)  # 输出: True
print(6 in my_list)  # 输出: False
 

排序

可以使用 sort() 和 sorted() 对列表进行排序。

 
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5]
 
# 使用 sort() 就地排序
my_list.sort()
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]
 
# 使用 sorted() 返回排序后的列表
sorted_list = sorted(my_list)
print(sorted_list)  # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]
 

反转

可以使用 reverse() 和切片操作反转列表。

 
my_list = [1, 2, 3, 4, 5]
 
# 使用 reverse() 就地反转
my_list.reverse()
print(my_list)  # 输出: [5, 4, 3, 2, 1]
 
# 使用切片操作反转
reversed_list = my_list[::-1]
print(reversed_list)  # 输出: [1, 2, 3, 4, 5]
 

清空列表

可以使用 clear() 方法清空列表。

 
my_list = [1, 2, 3, 4, 5]
my_list.clear()
print(my_list)  # 输出: []
 

复制列表

可以使用 copy() 方法或切片操作复制列表。

 
my_list = [1, 2, 3, 4, 5]
 
# 使用 copy() 复制列表
copied_list = my_list.copy()
print(copied_list)  # 输出: [1, 2, 3, 4, 5]
 
# 使用切片操作复制列表
another_copied_list = my_list[:]
print(another_copied_list)  # 输出: [1, 2, 3, 4, 5]
 

计数

可以使用 count() 方法统计元素的出现次数。

 
my_list = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
print(my_list.count(2))  # 输出: 2
print(my_list.count(3))  # 输出: 3
print(my_list.count(4))  # 输出: 4
 

列表推导式

列表推导式是一种简洁的方式来创建列表。

 
# 创建一个包含平方数的列表
squares = [x * x for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
 
# 创建一个包含偶数平方数的列表
even_squares = [x * x for x in range(10) if x % 2 == 0]
print(even_squares)  # 输出: [0, 4, 16, 36, 64]
 

嵌套列表

列表可以嵌套,形成多维列表。

 
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
 
# 访问嵌套列表的元素
print(matrix[1][2])  # 输出: 6
 
# 使用列表推导式展平嵌套列表
flattened = [num for row in matrix for num in row]
print(flattened)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
 

条件表达式

可以在列表推导式中使用条件表达式来动态生成列表。

 
# 使用条件表达式生成列表
numbers = [1, 2, 3, 4, 5]
squared_evens = [x * x if x % 2 == 0 else x for x in numbers]
print(squared_evens)  # 输出: [1, 4, 3, 16, 5]
 

嵌套列表推导式

可以使用嵌套的列表推导式来处理多维数据。

 
# 嵌套列表推导式
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
 
# 展平嵌套列表
flattened = [num for row in matrix for num in row if num % 2 == 0]
print(flattened)  # 输出: [2, 4, 6, 8]
 

高级排序

可以使用 sort() 和 sorted() 的 key 参数来实现自定义排序。

 
# 自定义排序
data = [{'name': 'Alice', 'age': 25},
        {'name': 'Bob', 'age': 30},
        {'name': 'Charlie', 'age': 20}]
 
# 按年龄排序
sorted_data = sorted(data, key=lambda x: x['age'])
print(sorted_data)  # 输出: [{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]
 

enumerate()

enumerate() 可以在遍历时获取元素的索引。

 
# 使用 enumerate() 获取索引和值
my_list = ['a', 'b', 'c']
for index, value in enumerate(my_list):
    print(f"Index: {index}, Value: {value}")
# 输出:
# Index: 0, Value: a
# Index: 1, Value: b
# Index: 2, Value: c
 

zip()

zip() 可以将多个列表组合成一个元组列表。

 
 

结合 map()

map() 可以对列表中的每个元素应用一个函数。

 
# 使用 map() 对列表中的每个元素应用函数
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x * x, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]
 

结合 filter()

filter() 可以根据条件过滤列表中的元素。

 
# 使用 filter() 过滤列表中的元素
numbers = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # 输出: [2, 4]
 

结合 reduce()

reduce() 是一个函数式编程工具,可以将一个函数累积地应用到列表的元素上。

 
from functools import reduce
 
# 使用 reduce() 累积计算列表的和
numbers = [1, 2, 3, 4, 5]
sum_result = reduce(lambda x, y: x + y, numbers)
print(sum_result)  # 输出: 15
 

高级切片

切片操作可以用于更复杂的列表操作,例如反转、步长等。

 
# 使用切片操作反转列表
my_list = [1, 2, 3, 4, 5]
reversed_list = my_list[::-1]
print(reversed_list)  # 输出: [5, 4, 3, 2, 1]
 
# 使用切片操作提取偶数索引的元素
even_index_elements = my_list[::2]
print(even_index_elements)  # 输出: [1, 3, 5]
 

浅拷贝

copy() 方法或切片操作 [:] 会创建一个浅拷贝。

 
 

深拷贝

copy 模块的 deepcopy() 方法可以创建一个深拷贝。

 
import copy
 
# 深拷贝
original = [1, 2, [3, 4]]
deep_copy = copy.deepcopy(original)
deep_copy[2].append(5)
print(original)  # 输出: [1, 2, [3, 4]]
print(deep_copy)  # 输出: [1, 2, [3, 4, 5]]
 

all() 和 any()

all() 和 any() 可以检查列表中的元素是否满足某些条件。

 
# 使用 all() 和 any() 检查条件
numbers = [1, 2, 3, 4, 5]
print(all(x > 0 for x in numbers))  # 输出: True
print(any(x > 5 for x in numbers))  # 输出: False
 

sum()

sum() 可以计算列表中所有元素的总和。

 
# 使用 sum() 计算总和
numbers = [1, 2, 3, 4, 5]
print(sum(numbers))  # 输出: 15
 

高级删除

可以使用 del 和切片操作来删除列表中的多个元素。

 
# 使用 del 删除多个元素
my_list = [1, 2, 3, 4, 5]
del my_list[1:3]
print(my_list)  # 输出: [1, 4, 5]