一天一个Python知识点——Day 5: 列表(List)基础操作

一天一个Python知识点——Day 5: 列表(List)基础操作

列表(List)是Python中最灵活的有序集合类型,可以存储任意类型的元素,并且支持动态修改。今天我们将全面学习列表的核心操作!

列表的创建

列表用方括号[]表示,元素之间用逗号分隔:

1
2
3
4
5
6
# 创建空列表
empty_list = []
# 创建带初始值的列表
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True] # 可以混合不同类型
nested = [[1, 2], [3, 4]] # 嵌套列表

特殊创建方式:

1
2
3
4
# 使用list()构造函数
chars = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']
# 列表推导式(后续会详细讲解)
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]

列表的索引与切片

和字符串类似,列表支持索引和切片操作。

索引访问

1
2
fruits = ["apple", "banana", "cherry"]print(fruits[0])   # "apple"(正向索引从0开始)
print(fruits[-1]) # "cherry"(负索引表示从末尾开始)

切片操作

1
2
3
4
5
6
numbers = [0, 1, 2, 3, 4, 5]
print(numbers[1:4]) # [1, 2, 3](索引1到3)
print(numbers[:3]) # [0, 1, 2](从开始到索引2)
print(numbers[2:]) # [2, 3, 4, 5](索引2到最后)
print(numbers[::2]) # [0, 2, 4](步长为2)
print(numbers[::-1]) # [5, 4, 3, 2, 1, 0](反转列表)

列表的修改

列表是可变对象,可以直接修改元素:

1
2
3
4
5
6
7
fruits = ["apple", "banana", "cherry"]
fruits[1] = "blueberry" # 修改第二个元素
print(fruits) # ['apple', 'blueberry', 'cherry']
# 切片赋值
numbers = [1, 2, 3, 4, 5]
numbers[1:3] = [20, 30] # 替换切片部分
print(numbers) # [1, 20, 30, 4, 5]

列表的常用方法

添加元素

方法 描述 示例
append() 在末尾添加单个元素 fruits.append("orange")
insert() 在指定位置插入元素 fruits.insert(1, "mango")
extend() 添加多个元素(合并列表) fruits.extend(["grape", "pear"])

删除元素

方法 描述 示例
remove() 删除指定值的元素 fruits.remove("banana")
pop() 删除并返回指定索引的元素 last = fruits.pop()
clear() 清空整个列表 fruits.clear()

其他操作

方法 描述 示例
index() 返回元素的索引 fruits.index("apple")
count() 统计元素出现次数 fruits.count("apple")
sort() 原地排序 fruits.sort()
reverse() 原地反转 fruits.reverse()
copy() 浅拷贝列表 new_list = fruits.copy()

列表的运算

1
2
3
4
a = [1, 2, 3]b = [4, 5]
# 列表拼接combined = a + b # [1, 2, 3, 4, 5]
# 重复列表repeated = a * 2 # [1, 2, 3, 1, 2, 3]
# 成员检测print(3 in a) # Trueprint(6 not in a) # True

列表的遍历

1
2
# 直接遍历元素fruits = ["apple", "banana", "cherry"]for fruit in fruits:    print(fruit)
# 遍历索引和元素for idx, fruit in enumerate(fruits): print(f"Index {idx}: {fruit}")

实战练习

1
2
3
4
5
6
7
8
9
10
# 统计列表中大于5的元素数量
numbers = [3, 7, 2, 9, 4, 6]
count = sum(1 for num in numbers if num > 5)
print(f"大于5的元素有{count}个")
# 删除列表中的重复元素(保留顺序)
unique = []
for item in [1, 2, 2, 3, 4, 4, 5]:
if item not in unique:
unique.append(item)
print(unique) # [1, 2, 3, 4, 5]

今日总结

  • 列表创建:[]或list(),可包含任意类型元素
  • 索引切片:与字符串类似,list[0]、list[1:3]、list[::-1]
  • 修改方法:append()、insert()、remove()、pop()等
  • 列表运算:+拼接、*重复、in检测成员
  • 遍历方式:直接遍历或使用enumerate()

思考题:

1
a = [1, 2, 3]b = ab[0] = 100print(a)  # 输出什么?为什么?

Python 列表赋值与引用解释

这段代码演示了 Python 中列表的可变性和引用机制:

python

1
2
3
4
a = [1, 2, 3]
b = a # b 和 a 指向同一个列表对象
b[0] = 100 # 通过 b 修改列表的第一个元素
print(a) # 输出 [100, 2, 3]

详细解释

  1. 创建列表

    python

1
a = [1, 2, 3]
  • 创建一个列表对象 [1, 2, 3]
  • 变量 a 指向这个列表

赋值操作

python

1
b = a
  • 这不是创建列表的副本,而是让 b 指向 a 所指向的同一个列表对象
  • 现在 ab 是同一个列表的两个名称(别名)

修改列表

python

1
b[0] = 100
  • 通过 b 修改列表的第一个元素
  • 由于 ab 指向同一个列表,a 看到的列表也被修改了

输出结果

python

  1. print(a)  # 输出 [100, 2, 3]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    - 验证了 `a` 指向的列表确实被修改了

    ## 关键概念

    - **可变对象**:列表是可变对象,可以就地修改
    - **引用赋值**:`b = a` 只是复制了引用,而不是创建新对象
    - **副作用**:通过一个引用修改对象会影响所有引用该对象的变量

    ## 如何真正复制列表

    如果想创建独立副本,可以使用以下方法:

    python

    a = [1, 2, 3] b = a.copy() # 或 b = a[:] 或 b = list(a) b[0] = 100 print(a) # 输出 [1, 2, 3] (不受影响) print(b) # 输出 [100, 2, 3]

这样 `a` 和 `b` 就是两个独立的列表对象,修改一个不会影响另一个。