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中,这个函数可以实现深拷贝

 元组

待更新

集合

待更新

posted @ 2020-07-06 22:49  LoongChan  阅读(449)  评论(0编辑  收藏  举报