跳转至

04 列表基础

Python 列表基础

Python 列表(List)是一种有序、可变的数据结构,可以存储任意类型的元素(整数、字符串、对象等)。列表用方括号 [] 表示,元素之间用逗号 , 分隔,下方都是一些常见的列表。

1
2
3
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", True, 3.14]

列表的创建

列表可以通过以下几种方式创建:

  • 直接定义列表:
    my_list = [1, 2, 3]
    
  • 使用 list() 函数转换可迭代对象,这个很方便的一个点就是可以直接将一个字符串拆开放:
    my_list = list("abc")  # 结果为 ['a', 'b', 'c']
    
  • 使用列表推导式:
    squares = [x**2 for x in range(5)]  # 结果为 [0, 1, 4, 9, 16]
    

列表的索引和切片

Python 列表支持索引(从 0 开始)和切片操作:

索引访问

1
2
3
fruits = ["apple", "banana", "cherry"]
print(fruits[0])  # 输出 "apple"
print(fruits[-1])  # 输出 "cherry"(-1 表示最后一个元素)

切片操作start:stop:step):

1
2
3
4
5
numbers = [0, 1, 2, 3, 4, 5] # 切片操作是左闭右开的
print(numbers[1:4])  # 输出 [1, 2, 3]
print(numbers[:3])   # 输出 [0, 1, 2]
print(numbers[::2])  # 输出 [0, 2, 4]
print(numbers[::-1])  # 输出 [5, 4, 3, 2, 1, 0]

列表的常用方法

Python 列表提供了许多内置方法用于增删改查:

添加元素

  • append():在末尾添加元素:

    fruits = ["apple", "banana", "cherry"]
    fruits.append("orange")  # ["apple", "banana", "cherry", "orange"]
    
    如果想要直接合并两个列表,也可以使用+
    1
    2
    3
    4
    list1 = [1,2,3]
    list2 = [4,5,6]
    list3 = list1 + list2 # + 代表的是连接关系
    print(list3) # [1, 2, 3, 4, 5, 6]
    
    如果想要重复列表,直接使用*
    1
    2
    3
    list1 = [1,2,3]
    list2 = list1 * 3
    print(list2) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
    

  • extend():合并另一个列表:

    fruits = ["apple", "banana", "cherry", "orange"]
    fruits.extend(["grape", "kiwi"])  # ["apple", "banana", "cherry", "orange", "grape", "kiwi"]
    

  • insert():在指定位置的前面插入:
    fruits =  ["apple", "banana", "cherry", "orange", "grape", "kiwi"]
    fruits.insert(1, "pear")  # ["apple", "pear", "banana", "cherry", "orange", "grape", "kiwi"]
    

删除元素

  • remove():删除指定值的第一个匹配项(根据值来移除):
    fruits = ["apple", "pear", "banana", "cherry", "orange", "grape", "kiwi"]
    fruits.remove("banana")  # ["apple", "pear", "cherry", "orange", "grape", "kiwi"]
    
    特别的强调一下是删除第一个匹配项,而不是删除所有匹配项,例如:
    fruits = ["apple", "banana", "cherry", "orange", "banana","grape", "kiwi"]
    fruits.remove("banana") # ['apple', 'cherry', 'orange', 'banana', 'grape', 'kiwi']
    
  • pop():删除指定索引的元素(不填则默认删除最后一个):

    1
    2
    3
    4
    fruits =['apple', 'cherry', 'orange', 'banana', 'grape', 'kiwi']
    fruits.pop(1)  # ['apple', 'orange', 'banana', 'grape', 'kiwi']
    fruits =['apple', 'cherry', 'orange', 'banana', 'grape', 'kiwi']
    fruits.pop() # ['apple', 'cherry', 'orange', 'banana', 'grape']
    

  • clear():清空列表:

    fruits.clear()  # []
    

查找与统计

  • index():返回元素的索引:
    fruits = ["apple", "banana", "cherry"]
    print(fruits.index("banana"))  # 输出 1
    
  • count():统计元素出现次数:
    numbers = [1, 2, 2, 3, 2]
    print(numbers.count(2))  # 输出 3
    

排序与反转

  • sort():排序(默认升序,可以添加 reverse 参数调整排序顺序):
    1
    2
    3
    numbers = [3, 1, 4, 2]
    numbers.sort()  # [1, 2, 3, 4]
    numbers.sort(reverse=True) # [4, 3, 2, 1]
    
  • reverse():反转列表顺序:
    numbers = [1, 2, 3, 4]
    numbers.reverse()  # [4, 3, 2, 1]
    

常见应用场景

遍历列表:使用 for 循环遍历列表:

1
2
3
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit,end=" ")

apple banana cherry

列表推导式:列表推导式(List Comprehension)提供了一种简洁的生成列表的方式,但是注意用[ ]包裹元素:

1
2
3
4
# 生成 0 到 9 的平方列表
squares = [x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 筛选偶数
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]

列表浅拷贝:列表是可变对象,直接赋值会导致引用传递(修改副本会影响原列表)。可以使用 copy() 或切片实现浅拷贝,以下展示两种不同的方式:

1
2
3
4
5
6
7
8
original = [1, 2, 3]
copy1 = original.copy() # 通过copy实现浅拷贝
copy2 = original[:] # 通过切片进行浅拷贝
copy1[0] = "a" # 对副本进行修改并不影响初始列表original
copy2[0] = "b" # 对副本进行修改并不影响初始列表original
print(original)
print(copy1) 
print(copy2)

1
2
3
[1, 2, 3]
['a', 2, 3]
['b', 2, 3]

如果采用直接赋值的方式,就会出现以下问题:

1
2
3
4
5
original = [1, 2, 3]
copy1 = original
copy1[0] = "a"
print(original) # 由于使用了显式赋值,因此修改copy1的时候也会影响原列表
print(copy1)
['a', 2, 3]
['a', 2, 3]

嵌套列表:列表可以包含其他列表,形成多维数据结构:

1
2
3
4
5
6
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][2])  # 输出 6,因为下标是从0开始的

Python 列表是一种灵活、功能丰富的数据结构,适用于各种数据处理场景。熟练掌握列表的创建、索引、方法、遍历和推导式,可以大大提高编程效率。