Python元组,列表,字典,集合
1.元组
元组是有序的,只有index和count两种方法,一看到元组,就提醒是不可更改的
names = ('wll', 'ly', 'jxx', 'syq')
(1)index方法
print(names.index('ly')) #找'ly'在元组中的第几个,从0开始 #输出结果 1
(2)count方法
print(names.count('wll')) #计数,'wll'在元组中有几个 #输出 1
(3)元组的输出
print(names) #输出元组 print(names[0]) #输出元组的第一个元组,下标从0开始 #输出 ('wll', 'ly', 'jxx', 'syq') wll
#逐个输出元组中的每个元素 for i in names: print(i) print("------------------") for i in range(len(names)): print(names[i]) #输出 wll ly jxx syq ------------------ wll ly jxx syq
2.列表
列表是有序的
names = ["WuLanLan", "LuYue", "JiangXiaoXia", "ShenYuQian", "WangRong"]
(1)增
names.append("WangRong") # 插在最后一个 print(names) names.insert(1, "ShiYuTing") # 插在第二个的位置上 print(names) #输出 ['WuLanLan', 'LuYue', 'JiangXiaoXia', 'ShenYuQian', 'WangRong', 'WangRong'] ['WuLanLan', 'ShiYuTing', 'LuYue', 'JiangXiaoXia', 'ShenYuQian', 'WangRong', 'WangRong']
(2)删
names.remove("WangRong") #如果有多个,只删除一个 print(names) del names[2] #删除列表中第三个元素,下标是2,从零开始 print(names) names.pop() # 默认不输入下标,则删除最后一个值 print(names) #输出 ['WuLanLan', 'LuYue', 'JiangXiaoXia', 'ShenYuQian'] ['WuLanLan', 'LuYue', 'ShenYuQian'] ['WuLanLan', 'LuYue']
(3)改
names[2] = "Jiangxiaoxia" #把第三个元素改为‘Jiangxiaoxia’ print(names) #输出 ['WuLanLan', 'LuYue', 'Jiangxiaoxia', 'ShenYuQian', 'WangRong']
(4)查
print(names) print(names[0]) # 切片,输出第一个元素 print(names[1:3]) # 切片,左闭右开,输出从第二个到第三个 print(names[3]) # 切片,输出第四个元素 print(names[-1]) # 切片,-1表示最后一个元素 print(names[-3:-1]) # 切片,从左往右数,不能从右往左数 print(names[-3:]) # 切片,数到最后一个,冒号后面忽略 print(names[:3]) # 切片,第一个开始数,冒号前面可以忽略,相当于[0:3] print(names[0:-1:2]) # 切片,从0开始到最后一个,步长为2 print(names[::2]) # 切片,从0开始到最后一个,步长为2 print(names[:]) # 切片,从0开始到最后一个,默认步长为1 #输出 ['WuLanLan', 'LuYue', 'JiangXiaoXia', 'ShenYuQian', 'WangRong'] WuLanLan ['LuYue', 'JiangXiaoXia'] ShenYuQian WangRong ['JiangXiaoXia', 'ShenYuQian'] ['JiangXiaoXia', 'ShenYuQian', 'WangRong'] ['WuLanLan', 'LuYue', 'JiangXiaoXia'] ['WuLanLan', 'JiangXiaoXia'] ['WuLanLan', 'JiangXiaoXia', 'WangRong'] ['WuLanLan', 'LuYue', 'JiangXiaoXia', 'ShenYuQian', 'WangRong']
(5)其他方法
print(names.index("WuLanLan")) # 索引 print(names[names.index("WuLanLan")]) #WuLanLan是0,输出列表里0的元素,还是WuLanLan #输出 0 WuLanLan
print(names.count("WangRong")) # 计数,列表里WangRong的个数 #输出 1
names.clear() # 清除 print(names) #输出 []
names.reverse() # 反转 print(names) #输出 ['WangRong', 'ShenYuQian', 'JiangXiaoXia', 'LuYue', 'WuLanLan']
names.sort() # 排序,按照ASCII码排序 print(names) #输出 ['JiangXiaoXia', 'LuYue', 'ShenYuQian', 'WangRong', 'WuLanLan']
names2 = [1, 2, 3, 4] names.extend(names2) # 合并 print(names) #输出 ['JiangXiaoXia', 'LuYue', 'ShenYuQian', 'WangRong', 'WuLanLan', 1, 2, 3, 4]
# 循环输出列表 for i in names: print(i) #输出 JiangXiaoXia LuYue ShenYuQian WangRong WuLanLan
import copy names = ["WuLanLan", "LuYue", ["Tom", "Jack"], "JiangXiaoXia", "ShenYuQian", "WangRong"] names2 = copy.deepcopy(names) # 潜copy,指向同一块地址 print(names) print(names2) names[3] = "沈玉倩" names[2][0] = "Rose" print(names) #输出 ['WuLanLan', 'LuYue', ['Tom', 'Jack'], 'JiangXiaoXia', 'ShenYuQian', 'WangRong'] ['WuLanLan', 'LuYue', ['Tom', 'Jack'], 'JiangXiaoXia', 'ShenYuQian', 'WangRong'] ['WuLanLan', 'LuYue', ['Rose', 'Jack'], '沈玉倩', 'ShenYuQian', 'WangRong']
3.字典
字典 key-value 是无序的
info = {"29": "Wulanlan", "13": "Luyue", "18": "Shenyuquan", "06": "Jiangxiaoxia" }
(1)输出字典里的元素
for i in info: # 建议用这种 print(i, info[i]) print("-------------------") for k, v in info.items(): # 不建议用这种,数据量大的话很崩溃 print(k, v) #输出 29 Wulanlan 13 Luyue 18 Shenyuquan 06 Jiangxiaoxia ------------------- 29 Wulanlan 13 Luyue 18 Shenyuquan 06 Jiangxiaoxia
print(sorted(info.items(), key=lambda d: d[0], reverse=True)) # 根据key的值排序后倒序输出字典里的元素 #输出 [('29', 'Wulanlan'), ('18', 'Shenyuquan'), ('13', 'Luyue'), ('06', 'Jiangxiaoxia')]
print(info.items()) # 把字典转成列表 info_3 = dict.fromkeys([1, 2, 3], [1, {"name": "wll"}, 111]) # 也是一种创建字典 print(info_3) info_3[2][1]["name"] = "bbb" # 你以为只改了一个,其实都改了 print(info_3) #输出 dict_items([('29', 'Wulanlan'), ('13', 'Luyue'), ('18', 'Shenyuquan'), ('06', 'Jiangxiaoxia')]) {1: [1, {'name': 'wll'}, 111], 2: [1, {'name': 'wll'}, 111], 3: [1, {'name': 'wll'}, 111]} {1: [1, {'name': 'bbb'}, 111], 2: [1, {'name': 'bbb'}, 111], 3: [1, {'name': 'bbb'}, 111]}
(2)改
info["29"] = "吴兰兰" print(info) info.update(info_2) # 有的更新,没有的创建 print(info) #输出 {'29': '吴兰兰', '13': 'Luyue', '18': 'Shenyuquan', '06': 'Jiangxiaoxia'} {'29': '吴兰兰', '13': 'LuYue', '18': 'Shenyuquan', '06': 'Jiangxiaoxia', '01': 'Denglei', '02': 'Huaxiaofeng'}
(3)增
info["20"] = "Wangrong" print(info) #输出 {'29': 'Wulanlan', '13': 'Luyue', '18': 'Shenyuquan', '06': 'Jiangxiaoxia', '20': 'Wangrong'}
(4)删
info.pop("29") # 标准删 print(info) del info["13"] print(info) info.popitem() # 随机删 print(info) #输出 {'13': 'Luyue', '18': 'Shenyuquan', '06': 'Jiangxiaoxia'} {'18': 'Shenyuquan', '06': 'Jiangxiaoxia'} {'18': 'Shenyuquan'}
(5)查
print(info["29"]) # 不建议用这种方法,除非很确定字典里有这个键值 print(info.get("29")) # 一般用这种方法 print("29" in info) # info.has_key("29") #输出 Wulanlan Wulanlan True
(6)多级嵌套
1 list_move = {"电影": { 2 "美国": ["恐怖游轮", "记忆碎片", "穆赫兰道"], 3 "中国": ["唐人街探案", "杀破狼", "使徒行者"] 4 }, "电视剧": { 5 "美国": ["城堡岩", "神探夏洛克", "假面真情"], 6 "中国": ["暗黑者", "武林外传", "无证之罪"] 7 }, "动漫": { 8 "日本": ["名侦探柯南", "进击的巨人", "灌篮高手"], 9 "中国": ["画江湖系列", "狐妖小红娘", "全职高手"] 10 } 11 } 12 list_move["动漫"]["中国"][1] = "斗破苍穹" 13 print(list_move) 14 15 list_move.setdefault("小说", {"中国": [1,2]}) # 在字典里找"小说",如果能取到,返回,如果取不到,就创建一个新的key,value值为逗号后面的 16 print(list_move) 17 18 #输出 19 {'电影': {'美国': ['恐怖游轮', '记忆碎片', '穆赫兰道'], '中国': ['唐人街探案', '杀破狼', '使徒行者']}, '电视剧': {'美国': ['城堡岩', '神探夏洛克', '假面真情'], '中国': ['暗黑者', '武林外传', '无证之罪']}, '动漫': {'日本': ['名侦探柯南', '进击的巨人', '灌篮高手'], '中国': ['画江湖系列', '斗破苍穹', '全职高手']}} 20 {'电影': {'美国': ['恐怖游轮', '记忆碎片', '穆赫兰道'], '中国': ['唐人街探案', '杀破狼', '使徒行者']}, '电视剧': {'美国': ['城堡岩', '神探夏洛克', '假面真情'], '中国': ['暗黑者', '武林外传', '无证之罪']}, '动漫': {'日本': ['名侦探柯南', '进击的巨人', '灌篮高手'], '中国': ['画江湖系列', '斗破苍穹', '全职高手']}, '小说': {'中国': [1, 2]}}
4.集合
集合,无序的,去重
list_1 = [1, 1, 2, 3, 4, 5, 6, 8, 2, 5] list_1 = set(list_1) list_2 = set([3, 22, 3, 5, 10, 12]) print(list_1, type(list_1), list_2) #打印集合1,1的类型,集合2 #输出 {1, 2, 3, 4, 5, 6, 8} <class 'set'> {3, 5, 10, 12, 22} #list_1的类型是set,集合,集合是自动去重的
(1)交集
print(list_1.intersection(list_2)) #交集 #输出 {3, 5}
print(list_1 & list_2) #交集 #输出 {3, 5}
(2)并集
print(list_1.union(list_2)) #并集 #输出 {1, 2, 3, 4, 5, 6, 8, 10, 12, 22}
print(list_1 | list_2) #并集 #输出 {1, 2, 3, 4, 5, 6, 8, 10, 12, 22}
(3)差集
print(list_1.difference(list_2)) # 差集,在1里面不在2里面 print(list_2.difference(list_1)) # 差集,在2里面不在1里面 #输出 {1, 2, 4, 6, 8} {10, 12, 22}
print(list_1 - list_2) # 差集,在1里不在2里 print(list_2 - list_1) # 差集,在2里不在1里 #输出 {1, 2, 4, 6, 8} {10, 12, 22}
(4)对称差集
print(list_1.symmetric_difference(list_2)) # 对称差集,去掉1和2的交集之后再合并 #输出 {1, 2, 4, 6, 8, 10, 12, 22}
print(list_1 ^ list_2) # 对称差集,去掉1和2的交集之后再并 #输出 {1, 2, 4, 6, 8, 10, 12, 22}
(5)子集
list_3 = set([1, 2, 3]) print(list_3.issubset(list_1)) #3是不是1的子集,是则返回True,否则返回False print(list_1.issuperset(list_3)) #1是不是3的父子集,即3是不是1的子集 #输出 True True
(6)其他方法
list_3 = set([1, 2, 3]) list_4 = set([4, 5, 6]) print(list_3.isdisjoint(list_4)) # 3和4没有交集返回为True,有交集返回为False #输出 True
# 添加一项 list_1.add(66) print(list_1) #输出 {1, 2, 3, 4, 5, 6, 66, 8} #集合是无序的,添加到哪个位置不知道
# 添加多项 list_1.update([88, 2333]) print(list_1) #输出 {1, 2, 3, 4, 5, 6, 66, 8, 88, 2333}
# 删除,删除一项,如果有多个1怎么办删哪个,集合天生去重呀!!! list_1.remove(1) print(list_1) #输出 {2, 3, 4, 5, 6, 8}
# 长度 print(len(list_1)) #输出 7
# 1在集合里吗 print(1 in list_1) # 1不在集合里吗 print(1 not in list_1) #输出 True False
# 潜复制 list_5 = list_1.copy() print(list_5) #输出 {1, 2, 3, 4, 5, 6, 8}
# 删除任一一个元素,并且将那个元素返回 print(list_1.pop(), list_1) #输出 1 {2, 3, 4, 5, 6, 8}
# 删除,remove删除不存在的会报错,discard只返回None print(list_1.discard(6666), list_1) #输出 None {2, 3, 4, 5, 6, 8}