1. 列表(list)
- 列表由一系列按特定顺序排列的元素组成(有序),列表中的元素可以是不同类型的对象
- 列表用方括号
[]表示,元素之间用逗号,分隔
1.1 访问列表元素
motorcycles = ['honda', 'yamaha', 'suzuki']
print(f'len(motorcycles): {len(motorcycles)}')
# 索引从 0 开始
print(f'motorcycles[0]: {motorcycles[0]}')
负数索引
-1 表示列表最后一个元素,依此类推
print(motorcycles[-1])
print(motorcycles[-2])
1.2 列表操作
# 初始化
motorcycles = []
# 添加元素
motorcycles.append('yamaha')
motorcycles.append('suzuki')
# 插入元素
motorcycles.insert(0, 'honda')
# 删除元素
del motorcycles[0]
# 根据值删除元素
motorcycles.remove('yamaha')
motorcycles = ['honda', 'yamaha', 'suzuki']
# pop() 弹出列表末尾的元素
pop_cycles = motorcycles.pop()
# 弹出指定位置的元素
first_cycle = motorcycles.pop(0)
1.3 排序
# 方法sort() 是永久性地修改列表元素的排列顺序(列表是不可恢复的改变)
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(f'Sorted cars: {cars}')
# 临时排序
cars = ['bmw', 'audi', 'toyota', 'subaru']
sort_cars = sorted(cars)
print(f"Sorted cars:{sort_cars} \n原cars:{cars}")
# 倒序
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(f'cars.sort(reverse=True): {cars}')
列表反转(非排序)
# reverse()也是永久性地修改
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(f"Reversed cars: {cars}")
1.4 切片(slicing)
生成列表的任意子集,指定元素的索引
语法:[start:end]
# 转为list
numbers = list(range(6))
# [0, 1, 2, 3, 4, 5]
print(f'min(numbers): {min(numbers)}, max(numbers): {max(numbers)}, sum(numbers): {sum(numbers)}')
numbers = list(range(6))
print(f'numbers[1:4]: {numbers[1:4]}') # [1, 2, 3]
print(f'numbers[:4]: {numbers[:4]}') # 默认从头开始
print(f'numbers[-3:]: {numbers[-3:]}') # 最后三名
复制列表
方法是同时省略起始索引和终止索引[:]
numbers = list(range(6))
copy_nums = numbers[:]
print(copy_nums)
1.5 列表判空
my_list = []
# 空列表被视为 False, 非空列表被视为 True
if my_list:
print(my_list[0])
else:
print('No list')
# isinstance() 检查变量是否为列表类型
if isinstance(my_list, list) and not my_list:
print("这是一个空列表")
2. 元组(tuple)
- 元组是一种不可变的有序集合类型
- 元组用圆括号
()表示,元素之间用逗号,分隔 - 列表可以修改,元组是不可修改的列表
2.1 创建元组
# 创建空元组
empty_tuple = ()
# 创建元组
my_tuple = (1, 'apple', 3.14)
# 单个元素的元组需要加逗号,否则会被解释为括号表达式
single_element_tuple = ('banana',)
2.2 元组操作
# 可通过索引访问元素
print(my_tuple[1])
不能修改元组的元素,但可以给存储元组的变量赋值
my_tuple[0] = 10
# TypeError: 'tuple' object does not support item assignment
# 可以重新赋值
my_tuple = (10, 'apple')
3. 集合(set)
- 集合是一个无序的不重复元素序列
- 集合用方括号
{}表示,元素之间用逗号,分隔
3.1 创建集合
方式一:set_name = {element1, element2, ..., elementn}
方式二:set_name = set(iteration)
set1 = {1, 2, 3}
set2 = set([4, 5, 6])
# 创建空集合
empty_set = set()
# 添加元素
empty_set.add(1)
注意:创建空集合要用 set() 而不是 {}, 因为 {} 会创建一个空的字典(dict)
3.2 集合操作
fruits = {'apple', 'banana', 'cherry'}
fruits.add('orange')
fruits.remove('banana')
# If the element is not a member, raise a KeyError.
# fruits.remove('nothing')
# 尝试移除不存在的元素,不会抛异常
fruits.discard('nothing')
3.3 数学的集合操作
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
# 并集(union)
print(a.union(b)) # 输出 {1, 2, 3, 4, 5, 6}
# 交集(intersection)
print(a.intersection(b)) # 输出 {3, 4}
# 差集(difference)
print(a.difference(b)) # 输出 {1, 2}
# 对称差集(symmetric difference)
print(a.symmetric_difference(b)) # 输出 {1, 2, 5, 6}
3.4 不可变集合(frozenset)
empty_set = frozenset()
set1 = frozenset({1, 2, 3})
print(set1) # frozenset({1, 2, 3})