Skip to content

列表与元组:切片、方法与推导式 ​

列表基础 ​

列表是可变序列,支持索引、切片、添加、删除元素。

python
fruits = ['apple', 'banana', 'cherry']
print(fruits[0])     # 'apple'
print(fruits[-1])    # 'cherry'(倒数第一个)
print(len(fruits))   # 3

fruits.append('date')
print(fruits)  # ['apple', 'banana', 'cherry', 'date']

切片 ​

切片语法:seq[start:stop:step]

python
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[2:5])    # [2, 3, 4](不包括5)
print(numbers[:3])     # [0, 1, 2](从开头)
print(numbers[7:])     # [7, 8, 9](到结尾)
print(numbers[::2])    # [0, 2, 4, 6, 8](步长2)
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](反转)

切片赋值:

python
lst = [1, 2, 3, 4, 5]
lst[1:3] = [20, 30, 40]
print(lst)  # [1, 20, 30, 40, 4, 5]

列表方法 ​

python
lst = [3, 1, 4, 1, 5]

lst.append(9)        # 末尾添加
lst.insert(2, 99)    # 位置2插入
lst.remove(1)        # 删除第一个1
popped = lst.pop()   # 弹出末尾
lst.sort()           # 原地排序
lst.reverse()        # 原地反转
count = lst.count(1) # 计数

# 不修改原列表
sorted_lst = sorted(lst)
reversed_lst = list(reversed(lst))

列表推导式 ​

python
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# 嵌套
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

元组 ​

元组是不可变序列,一旦创建无法修改。

python
point = (3, 5)
print(point[0])  # 3

# point[0] = 10  # TypeError

# 单元素元组需要逗号
single = (42,)
not_tuple = (42)  # 这是int,不是tuple

元组解包 ​

python
coords = (100, 200)
x, y = coords
print(x, y)  # 100 200

# 交换变量
a, b = 1, 2
a, b = b, a
print(a, b)  # 2 1

# * 收集剩余元素
first, *rest = [1, 2, 3, 4, 5]
print(first)  # 1
print(rest)   # [2, 3, 4, 5]

练习 ​

  1. 切片操作:给定lst = [0,1,2,3,4,5,6,7,8,9],用切片获取:偶数索引元素、倒数3个、反转列表。

  2. 列表推导式:用推导式生成:1-100的平方、能被3或5整除的数、字符串列表的长度列表。

  3. 元组解包:从data = ('Alice', 30, 'NYC', 'Engineer')提取name和job(跳过age和city)。

  4. 矩阵转置:用列表推导式转置3x3矩阵。

  5. 去重保序:编写函数去除列表重复元素,保持原顺序。

答案:第三章答案

下一节:字典与集合

用心记录每一步成长