Python笔记 —— 四种容器(列表,元组,字典,集合)
Python内置容器有四种:列表,元组,字典,集合
列表
# 声明 a = [] # 声明空列表 b = [1, "hello", 2.5] # 声明非空列表 c = [i + 1 for i in range(10)] # 列表递推式 d = list(range(3)) # 使用list()把其他可迭代对象转化成列表 # 对运算符的支持 e = a + b # 拼接两个列表元素,c = [1, 'hello', 2.5] f = 2 * b # 重复b两遍 d = [1, 'hello', 2.5, 1, 'hello', 2.5] # 切片操作 g = c # 浅拷贝,f是e的引用 h = c[:] # 深拷贝 c[:] # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] c[::] # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] c[0:8:2] # [2, 4, 6, 8],从下标为0到下标为8,间距为2,左闭右开 c[-1:-10:-2] # [10, 8, 6, 4, 2],倒数第一个元素下标视为-1,间距负数代表倒序 c[0:5:-1] # [] 不会报错,只会输出空列表 c[5:] # 两个参数可以任意省略 c[5:11:] # 三个参数也可以任意省略,即使范围 # 对于二元的切片操作,还可以使用赋值运算修改列表 h # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] h[1:5] = [1] # [1, 1, 6, 7, 8, 9, 10] h[-1:-3] = [0, 0, 0] # [1, 1, 6, 7, 8, 9, 0, 0, 0, 10] # 迭代器 it = c.__iter__() print(it.__next__()) # 1 print(it.__next__()) # 2 # in操作符 20 in h # False 20 not in h # True # 列表对于 内建函数 / 语句 的支持 m = [('a', 3), ('b', 1), ('c', 2)] len(c) # 列表长度 10 del c[-1] # 删除元素 min(m, key=lambda x: x[1]) # ('b', 1),自定义要比较的对象(准确的说并不是自定义比较函数) max(m, key=lambda x: x[1]) # ('a', 3) tuple(m) # 把列表转换成元组 # list的成员功能 c.append(11) # 在末尾插入一个元素 c.insert(0, 0) # 第一个参数是要插入的位置,第二个参数是要插入的值 c.extend([12, 13]) # 在末尾追加另外一个列表 c.remove(13) # 指定一个元素并删除 c.pop(11) # 指定一个索引并删除 c.count(5) # 指定一个元素,统计这个元素在列表中出现次数 c.reverse() # 翻转列表 c.sort() # 有两个参数可选,一个是reverse,一个是key c.index(5, 2, 10) # 检索某一个元素出现的位置,可以设置范围 c.clear() # 删除所有元素 # 更多关于list的功能需要导入operator包
字典
# 创建字典 a = {} # 声明一个空字典 b = {"XiaoMing": 99, "XiaoZhang": 80, "ZhangSan": 100} # 声明有键值对的字典 c = b.copy() # 浅拷贝生成一个字典(也就是引用) d = dict.fromkeys(["A", "B", "C"], None) # 以一个可迭代对象作为键,值全部都为100,创建一个新字典(如果省略value,默认值为None)如果可迭代对象是字典,以这个字典的键作为新字典的键 # 增 b["LiSi"] = 60 # 字典不允许存在相同的键,如果这个语句的键已经存在,则会更新值 b.setdefault("WangWu", 85) # 和上一行等价 # 删 del b["WangWu"] # 如果键不存在会报错 b.popitem() # 随机删除一个键值对(其实是按照哈希表顺序) b.pop("ZhangSan") # 和del等价,不存在也会报错 # 查 "XiaoMing" in b # 判断字典中是否有这个键 b["XiaoMing"] # 根据键查找值,时间复杂度O(1),因为是哈希表,如果没有这个键会报错 b.get("XiaoMing", None) # 查找键“XiaoMing”,但是如果没有找到的话不会报错而是返回指定的值None,因此比上面这行更好 [k for k, v in b.items() if v == 80] # 根据值查找键,把所有符合要求的值对应的键组成一个列表,如果没有返回空列表 # 改 # 修改键值对的方法和增加键值对的一样,只要键存在就是修改 # 只能修改值不能修改键(这也就是为什么键不可以是列表或者字典),如果要修改键只能删掉原有的键值对重新添加 # 内置函数 len(b) # 返回键值对个数 str(b) # 返回显示这个字典的字符串 # 字典类的成员函数 k = b.keys() # 返回一个遍历b中所有key的迭代器,需要手动转换成列表或者元组 v = b.values() # 返回一个遍历b中所有values的迭代器,需要手动转换成列表或者元组 i = b.items() # 返回一个遍历b中所有键值对的以(key, values)元组形式返回的的迭代器,需要手动转换成列表或者元组 a = b.update() # 把字典b中的键值对全部更新到a中,这个函数可以实现深拷贝
元组
待更新
集合
待更新