列表/字典/元组

列表 list

定义:用方括号 [] 包围、逗号分隔的有序集合,可空、可重复、元素可改。

创建
lst = [1, 2, 3]
lst = []                    # 空列表
lst = list((10, 20))        # 由元组转换
增
lst.append(obj)             # 尾部加元素
lst.insert(i, obj)          # 在索引 i 处插入,插入的元素成为新i,老i及后面的元素自动后移 
lst.extend(iterable)        # 把可迭代对象逐个加入尾部
删
lst.pop()                   # 删并返回最后一元素,不指定索引时删除最后一个元素
lst.pop(i)                  # 删并返回索引 i 处元素
lst.remove(value)           # 按值删,只删第一个匹配项
lst.clear()                 # 清空全部列表
改
lst[i] = new_value          # 直接赋值替换
lst[i:j] = iterable         # 切片替换
查
len(lst)                    # 长度,元素个数
lst[i]                      # 按索引取值
lst[i:j:k]                  # 切片,可设步长
value in lst                # 成员测试,返回布尔
lst.index(value)            # 返回第一次出现的索引
lst.count(value)            # 返回出现次数
排序与逆序
lst.sort()  # 就地升序
lst.sort(reverse=True) #就地降序
lst.reverse()                      # 就地逆序

字典 dict

“字典是‘键→值’的快速查找表,键不能改,值随便改;想按名字找东西,用它最快!”

定义:用花括号 {} 包围的 键:值 对集合,无序、可增删改查,键必须不可变(常用 str/int/tuple)。


创建
d = {'name': 'Tom', 'age': 15}
d = {}                          # 空字典
d = dict(name='Tom', age=15)    # 另一种写法

增 / 改(同语法)
d['score'] = 98     # 无则增,有则改
d.update({'city': 'SH', 'age': 16})  # 一次加/改多个

查
print(d['name'])        # Tom  (键不存在会 KeyError)
print(d.get('city'))    # SH   (键不存在返回 None,不报错)
print('age' in d)       # True 成员测试
print(len(d))           # 3  键值对个数

删
d.pop('city')           # 删并返回对应值
d.popitem()             # 随机删一对(3.10 前是“后进先出”)
del d['score']          # 直接删
d.clear()               # 清空

遍历
for k in d:             # 默认遍历键
    print(k, d[k])

for k, v in d.items():  # 一起拿键和值
    print(k, v)

键/值/对 视图
keys   = d.keys()       #  dict_keys(['name', 'age'])
values = d.values()     #  dict_values(['Tom', 16])
items  = d.items()      #  dict_items([('name', 'Tom'), ('age', 16)])

套娃:值可以是列表/字典
class_room = {
    1: ['Alice', 'Bob'],
    2: ['Lucy', 'Tom']
}
class_room[1].append('Jack')   # 改列表,字典本身没变键

速度特点
  • 按键查找平均 O(1)(哈希表),比列表遍历快得多
  • 键必须可哈希(不可变),所以列表不能当键,元组可以

元组 tuple

定义:用圆括号 () 包围、逗号分隔的有序不可变集合,可空、可重复。

创建
tup = (1, 2, 3)
tup = ()                         # 空元组
tup = (42,)                      # 单元素必须带逗号
tup = tuple([10, 20])            # 由列表转换
增删改

不可进行原位增删改;任何改动均通过新建元组实现:

tup = tup + (40, 50)             # 连接后生成新元组
查

与列表相同:

len(tup)
tup[i]
tup[i:j:k]
value in tup
tup.index(value)
tup.count(value)
特殊用途
  • 可作为字典键或集合元素(元素必须均不可变)
  • 占用内存比同长度列表少约 20 %,适合存储固定记录

类型互换
new_list = list(tuple_obj)
new_tuple = tuple(list_obj)