8.3元组
- 元组与列表比较相似,不同的是列表是可变的,元组是不可变的序列
- 元组定义
tup1 = () # 这样就定义了一个空元组
tup2 = tuple()
print(type(tup2)) # <class 'tuple'>
tup = (1, 2, 3, 4, 5, 6, 6, 6)
# t = 1, 2, 3, 4, 5, 6, 7, 8 # 这样也可以定义一个元组,不推荐这样定义,不直观
# print(type(t))
print(tup[0])
# tup[0] = 3
# print(tup) # does not support item assignment
print(tup.count(6)) # 统计元组某元素的个数
print(tup.index(6)) # 5 查找某元素,找到会返回索引,没找到会报错
# 列表转元组
list1 = [1, 2, 3, 4, 5]
tup2 = tuple(list1)
print(type(tup2)) # <class 'tuple'>
print(tup2) # (1, 2, 3, 4, 5)
# 元组转列表
list2 = list(tup2)
print(type(list2)) # <class 'list'>
print(list2) # [1, 2, 3, 4, 5]
# 元组切片
print(tup2[0:3])
# 元组遍历
for item in tup2:
print(item)
print("=" * 30)
# 小技巧
# 快速创建,全部元素都一样的元组
tup3 = (0,) * 10
print(tup3)
# 元组虽然不可以改变其元素但是可以通过拼接来创建新的元组,以达到增加元素的目的
print(tup)
print(id(tup))
tup = tup + (0,)
print(tup) # 注意这里并不是改变原来的元组,而是创建一个新的元组
print(id(tup))
# 删除元组
del tup
8.4集合
-
集合(set)是一个无序的不重复元素序列。
-
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame = {value01,value02,...}
# 或者
set(value)
- 集合的方法
A = {1, 3, 6, 4, 8, 9}
# 往集合里添加元素
A.add("hello")
print("增加后", A)
# 删除集合里的某个元素
A.remove(1)
print("删除后", A)
# 清空
# set1.clear()
# 复制集合
# newSet = set1.copy()
# 通过集合拼接取,不生成新集合 =>并集 生成新集合 union()
B = {10, "a", "b"}
A.update(B) # A + B
print("并集", A)
# =>差集 C = A - B
C = A.difference(B)
print("差集", C)
# =>交集
D = A.intersection(C)
print("交集", D)
# 移除集合中的元素,该元素在指定的集合也存在。
A.difference_update(C)
print("移除交集", A)
# 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
print(A.isdisjoint(C))
# 判断指定集合是否为该方法参数集合的子集。
print(A.issubset(B))
# symmetric_difference() 返回两个集合中不重复的元素集合。
# symmetric_difference_update()
# 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
- 并集,交集,差集图解
- 集合最常见的用法是用来去除重复的元素
- 例子:
list1 = [9, 9, 5, 1, 2, 2, 2, 2, 2, 6, 1, 2, 1, 2, 1]
print(list1)
list1 = list(set(list1))
print(list1)
8.5字典(重点)
-
字典是另一种可变容器模型,且可存储任意类型对象。
-
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号(**{})**中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
-
Python字典包含了以下内置方法:
序号 函数及描述 1 radiansdict.clear() 删除字典内所有元素 2 radiansdict.copy() 返回一个字典的浅复制 3 radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 4 radiansdict.get(key, default=None) 返回指定键的值,如果键不在字典中返回 default 设置的默认值 5 key in dict 如果键在字典dict里返回true,否则返回false 6 radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组 7 radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表 8 radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default 9 radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里 10 radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表 11 pop(key,default) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 12 popitem() 随机返回并删除字典中的最后一对键和值。
# 定义一个字典
countries = {"cn": "中国", "uk": "英国", "usa": "美国", "jp": "日本", "rus": "俄罗斯"}
print(countries.get("cn")) # 中国 读取
print(countries["cn"]) # 中国 读取
countries.update({"rome": "罗马"}) # 新增或修改
print(countries)
countries["germany"] = "德国" # 新增或修改
print(countries)
t = countries.fromkeys((0, 1), "default") # 创建一个新集合
print(t) # {0: 'default', 1: 'default'}
print("=" * 40)
print(countries.keys()) # 创建一个迭代器,其元素为集合的键
for item in countries.keys():
print(item) # 迭代取出元素
print("=" * 40)
print(countries.values()) # 创建一个迭代器,其元素为集合的值
for item in countries.values():
print(item) # 迭代取出元素
print("=" * 40)
print(countries.items())
for item in countries.items():
print(item) # 结构是一个元组
print("=" * 40)
del countries["jp"] # 删除键值对
print(countries)
- 小技巧
# 通过迭代器 列表里边套一个元组 生成字典
dict1 = dict([(1, 2), (2, 1)])
print(dict1)
# 字典生成式,url 分解时案例:
# q=%E4%BF%84%E7%BD%97%E6%96%AF%E7%BC%A9%E5%86%99&qs=n&form=QBRE&sp=-1&pq=%E4%BF%84%E7%BD%97%E6%96%AFsuoxie&sc=1-9&sk=&cvid=423E6B01861546F4A581F87F6A923484
url = "q=%E4%BF%84%E7%BD%97%E6%96%AF%E7%BC%A9%E5%86%99&qs=n&form=QBRE&sp=-1&pq=%E4%BF%84%E7%BD%97%E6%96%AFsuoxie&sc=1-9&sk=&cvid=423E6B01861546F4A581F87F6A923484"
parameters = {item.split("=")[0]: item.split("=")[1] for item in (items for items in url.split("&"))}
print(parameters)