组合数据类型将若干个值组合成一个单一的数据项,主要包括列表、元组、字典和集合。列表是有序且可变的集合,元素可为任意类型(含数字、字符串甚至其他列表),用方括号 [] 或 list() 创建,例如 [1, 2, 3]、['a', 'b', 'c'],list('abc') 得到 ['a', 'b', 'c']。元组是有序且不可变的集合,用圆括号 () 或 tuple() 创建,如 (2.3, 3.5)、tuple(['a', 'b', 'c']) 得到 ('a', 'b', 'c');单元素元组必须写成 (1213,),漏写逗号则得到整数。元组又称轻量级列表,成员方法只有 count 和 index。集合是无序且不重复的元素集合,用花括号 {} 或 set() 创建并自动去重,如 {2, 3, 3, 4} 结果为 {2, 3, 4}。字典用于存储键值对且无序,键必须是不可变类型(如字符串、整数或元组)且唯一,值可为任意类型,可用 {"姓名": "张三", "年龄": 25, "籍贯": "广州"} 或 dict(name="Alice", age=25) 创建。
序列中的元素有正索引和负索引:正索引从左侧 0 开始递增,负索引从右侧 -1 开始递减。切片语法为 sequence[start:stop:step],包含 start、不包含 stop,默认步长为 1,且不修改原序列。例如:
myList = [10, 20, 30, 40, 50]
print(myList[1:4]) # [20, 30, 40]
print(myList[:3]) # [10, 20, 30]
print(myList[2:]) # [30, 40, 50]
print(myList[::2]) # [10, 30, 50]
可用 for element in iterable: 遍历字符串、列表、元组、集合、字典和 range 对象。range(start, stop, step) 生成惰性整数序列,直接打印看不到具体值,需用 list() 转换,如 list(range(5)) 得到 [0, 1, 2, 3, 4],list(range(0, 10, 2)) 得到 [0, 2, 4, 6, 8]。
列表常用方法:append(x) 在末尾添加一个元素;extend(iterable) 将可迭代对象的全部元素一次追加到末尾;insert(i, x) 在索引 i 处插入;remove(x) 删除第一次出现的指定元素(不存在则引发 ValueError);pop(i) 移除并返回指定索引的元素(默认最后一个,越界引发 IndexError);index(x) 返回首次出现的索引;count(x) 统计出现次数;sort() 原地升序排序,sort(reverse=True) 降序。列表生成式 [expression for item in iterable if condition] 可简洁生成新列表,如 [x**2 for x in range(10)] 得到平方数列表,[x for x in range(10) if x % 2 == 0] 筛出偶数。若列表的每个元素仍是列表,则构成二维列表,用 列表对象[行索引][列索引] 访问,如 a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 时 a[1][2] 为 6。
字典用键访问值,如 font['字体'];键不存在会引发 KeyError,应使用 get(键) 或 get(键, 默认值)。为新键赋值则增加一项,为已有键赋值则覆盖原值。pop(键) 删除并返回对应值。items()、keys()、values() 分别返回键值对、键、值的可迭代对象,它们不是列表,可用 for...in 遍历。统计文本中各字符出现次数时应写 dct[c] = dct.get(c, 0) + 1,不能写 dct[c] = dct[c] + 1(键尚不存在会报错)。集合常用来去除可迭代对象中的重复元素,如 set([1, 2, 2, 3, 4, 4, 4, 5]) 得到 {1, 2, 3, 4, 5}。常见坑:空 {} 是空字典而不是空集合,空集合应写 set();append 一次只加一个元素,extend 才拆开追加;remove 只删除第一个匹配项;sort() 会修改原列表;单元素元组漏写逗号。
[] 或 list() 创建;元组有序不可变,用 () 或 tuple() 创建,单元素须写成 (1213,)。{} 或 set() 创建并自动去重;空 {} 是空字典,空集合用 set()。sequence[start:stop:step] 含头不含尾,不改原序列。range() 惰性生成整数,需 list() 才能看到序列值;for...in 可遍历可迭代对象。append/extend/insert/remove/pop/index/count/sort;sort() 原地排序。[expression for item in iterable if condition];二维列表用 a[行][列] 访问。get() 取值;items()/keys()/values() 返回可迭代对象;频次统计用 get(c, 0)。count 和 index;集合常用于去重。