JOURNAL / WORDS & IDEAS

Python 括号与数据结构速查

通过短例子区分列表、元组、字典和集合,说明逗号、可变性与可哈希性。

阅读设置

四种常见容器

语法 类型 要点
[1, 2] list 有序、可变、允许重复
(1, 2) tuple 有序、不可变容器
{"name": "菜牙"} dict 键值映射,键必须可哈希
{1, 2} set 不重复元素,无位置索引
empty_list = []
empty_tuple = ()
empty_dict = {}
empty_set = set()
single_tuple = (1,)
not_a_tuple = (1)  # 整数
also_a_tuple = 1, 2

非空元组主要由逗号形成,而不是只由括号决定。空元组是 ()。{} 总是空字典,空集合必须用 set()。

可变与可哈希

列表可以增删元素;元组不能替换自身的元素引用,但其中引用的可变对象仍可能改变。

record = ([1, 2], "demo")
record[0].append(3)
## hash(record) 会失败:它包含不可哈希的列表

字典键与集合元素要求可哈希,不应简单归纳为“不可变就可以”。字符串、整数及仅包含可哈希元素的元组通常可以;列表和字典不可以。

下标、调用与推导式

items = [10, 20, 30]
first = items[0]
tail = items[1:]
length = len(items)
squares = [x * x for x in range(4)]
unique = {x % 2 for x in range(4)}
mapping = {x: x * x for x in range(4)}

圆括号还用于调用函数或调整表达式优先级;方括号也用于下标和切片。阅读代码时要结合所在位置,不只看括号形状。