列表与元组:切片、方法与推导式
列表基础
列表是可变序列,支持索引、切片、添加、删除元素。
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]练习
切片操作:给定
lst = [0,1,2,3,4,5,6,7,8,9],用切片获取:偶数索引元素、倒数3个、反转列表。列表推导式:用推导式生成:1-100的平方、能被3或5整除的数、字符串列表的长度列表。
元组解包:从
data = ('Alice', 30, 'NYC', 'Engineer')提取name和job(跳过age和city)。矩阵转置:用列表推导式转置3x3矩阵。
去重保序:编写函数去除列表重复元素,保持原顺序。
答案:第三章答案
下一节:字典与集合