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}

 

posted @ 2018-12-06 14:14  少年_不识愁滋味  阅读(325)  评论(0编辑  收藏  举报