python7 元组集合字典
元组
列表:list —> []
元组:tuple —> ()
作用就是:类似列表,也可以存放多个元素
tuple1 = (1, 2, 3, 4, 5, 6)
print(tuple1) # (1, 2, 3, 4, 5, 6)
tuple2 = (1,)
print(tuple2) # (1,)
# 使用下标
print(tuple1[1]) # 2
print(tuple1[3]) # 4
# 切片操作
print(tuple1[:3]) # (1, 2, 3)
print(tuple1[::-1]) # (6, 5, 4, 3, 2, 1)
# 遍历 支持在for...in 遍历打印
for i in tuple1:
print(i)
'''
1
2
3
4
5
6
'''
# 支持 in, not in
if 5 in tuple1:
print('存在')
else:
print('不存在')
# 存在
# 进行增删改查
tuple1 += (7,)
print(tuple1) # (1, 2, 3, 4, 5, 6, 7)
# 元组不能删除
# del tuple1[6] # TypeError: 'tuple' object doesn't support item deletion
# 元组不能修改
# tuple1[2] = 100 # TypeError: 'tuple' object does not support item assignment
n = tuple1.index(3) # 返回要查询的元素的位置
print(n) # 2
# 要查询的元素没有找到则报错 ValueError: tuple.index(x): x not in tuple
print(tuple1.count(4)) # 1
print(len(tuple1)) # 7
print(max(tuple1)) # 7
print(min(tuple1)) # 1
tuple1 = (4, 1, 3, 8, 0, 6)
result = sorted(tuple1) # l = list(tuple1) ---> l.sort() --->result
print(result) # [0, 1, 3, 4, 6, 8]
# 使用类型转换
# 元组与列表是可以相互转换的
tuple1 = tuple(result)
print(type(tuple1)) # <class 'tuple'>
print(tuple1) # (0, 1, 3, 4, 6, 8)
s = str(tuple1)
print(type(s)) # <class 'str'>
print(s) # (0, 1, 3, 4, 6, 8)
l = list(tuple1)
print(type(l)) # <class 'list'>
print(l) # [0, 1, 3, 4, 6, 8]
集合
- tuple,list:有序 —> index
允许重复元素 - set: 无序 没有下标
不重复
声明:
- set1 = {1, 3, 5, 8}
- set1 = set() 空集合
- 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合遍历:for i in 集合:
支持:in not in 进行判断
# 定义 set() {}
set1 = {1, 3, 5, 8, 5, 1, 5, 1}
print(type(set1)) # <class 'set'>
print(set1) # {8, 1, 3, 5}
# 空集合的声明
set2 = set()
print(type(set2)) # <class 'set'>
print(len(set2)) # 0
print(set2) # set()
print(set1[0]) # TypeError: 'set' object does not support indexing
for i in set1:
print(i)
'''
8
1
3
5
'''
if 5 in set1:
print('存在')
# 存在
# 列表去重
import random
list1 = []
for i in range(15):
ran = random.randint(1, 10)
list1.append(ran)
print(list1) # [10, 5, 6, 9, 6, 6, 9, 7, 7, 4, 1, 3, 10, 9, 4]
set1 = set(list1)
print(set1) # {1, 3, 4, 5, 6, 7, 9, 10}
list1 = list(set1)
print(list1) # [1, 3, 4, 5, 6, 7, 9, 10]
增删改查
- 添加:
- add()
一个一个添加 - update()
update(tuple|list)
- add()
- 删除:
- remove(要删除元素)
如果要删除的元素不存在则报错 - discard(要删除元素) 丢弃
如果要删除的元素不存在不报错 - pop()
- remove(要删除元素)
# 增加
set1 = set()
set1.add('张三')
set1.add('李四')
set1.add('王五')
set1.add('张三')
print(set1) # {'张三', '王五', '李四'}
tuple1 = ('刘德华', '张学友', '王五')
set1.add(tuple1)
print(set1) # {('刘德华', '张学友', '王五'), '张三', '王五', '李四'}
set1.update(tuple1) # 类似:# list2.extend(list1)
print(set1) # {'张学友', '刘德华', ('刘德华', '张学友', '王五'), '张三', '王五', '李四'}
# 删除
set1.remove('张三')
print(set1) # {'张学友', '刘德华', ('刘德华', '张学友', '王五'), '王五', '李四'}
set1.discard('李四')
print(set1) # {'张学友', '刘德华', ('刘德华', '张学友', '王五'), '王五'}
set1.pop()
print(set1) # {'刘德华', ('刘德华', '张学友', '王五'), '王五'}
两个集合
- 交集:& set1 & set2 —> 共同存在元素
- 并集:| set1 | set2
- 差集:- set1 - set2 —> 找set1与set2不一样的元素
- 对称差集:^ set1 ^ set2
names1 = {'lucy', 'jack', 'steven', 'admin'}
names2 = {'lucy', 'steven', 'lily'}
# 交集
result = names1 & names2
print(result) # {'steven', 'lucy'}
result = names1.intersection(names2)
print(result) # {'steven', 'lucy'}
# 并集
result = names1 | names2
print(result) # {'admin', 'lily', 'steven', 'jack', 'lucy'}
result = names1.union(names2)
print(result) # {'admin', 'lily', 'steven', 'jack', 'lucy'}
# 差集
result = names1 - names2
print(result) # {'admin', 'jack'}
result = names2.difference(names1)
print(result) # {'lily'}
# 对称差集 ^
result = names1 ^ names2
print(result) # {'jack', 'admin', 'lily'}
result = names1.symmetric_difference(names2)
print(result) # {'jack', 'admin', 'lily'}
# 子集
print({8, 6, 3} > {8, 6}) # True
print({8, 5} < {8, 6, 3}) # False
字典
格式:
- dict1={}
- dict2={key:value,key:value,key:value}
特点:
- key必须是唯一的
- value可重复
- 键值对
set1={1,2,3,5,7}
dict1 = {1:‘aa’,2:‘ab’}
dict1 = {}
print(type(dict1)) # <class 'dict'>
dict2 = {'001': '张三', '002': '李四'}
print(type(dict2)) # <class 'dict'>
print(len(dict2)) # 2
dict3 = {'001': '张三', '002': '李四', '003': '张三'}
print(dict3) # {'001': '张三', '002': '李四', '003': '张三'}
dict4 = {1: 'aaa', 2: 'bbb', 3: 'ccc'}
print(dict4) # {1: 'aaa', 2: 'bbb', 3: 'ccc'}
# key不能是列表
dict5 = {[1, 2, 3]: 'abc', [1, 2, 3]: 'abcd'} # TypeError: unhashable type: 'list'
增删改查
- 增加元素:
字典[key]=value
注意: 添加的时候主要 是判断是否存在此key,
如果字典中已经存在一个相同的key,则后面添加的value替换了原来的value。
如果字典中不存在此key,则会添加到字典中。 - 删除元素:
- pop(key) —> 根据key删除字典中的键值对 类似: del dict[key]
- popitem() —>
- clear()
- del dict[key]
- 更新元素:
字典只能更新value
persons = {}
persons['620001'] = '雄涛'
persons['620002'] = '宗鑫'
persons['620003'] = '宝坤'
print(len(persons)) # 3
print(persons) # {'620001': '雄涛', '620002': '宗鑫', '620003': '宝坤'}
persons.pop('620003')
print(persons) # {'620001': '雄涛', '620002': '宗鑫'}
# 更新
persons['620001'] = '建华'
print(persons) # {'620001': '建华', '620002': '宗鑫'}
# 获取
value = persons.get('620002')
print(value) # 宗鑫
# 合并
dict1 = {'620004': '武茏'}
persons.update(dict1)
print(persons) # {'620001': '建华', '620002': '宗鑫', '620004': '武茏'}
# 添加
persons.setdefault('620005', '诗瑶')
persons.setdefault('620005', '诗瑶2')
print(persons) # {'620001': '建华', '620002': '宗鑫', '620004': '武茏', '620005': '诗瑶'}
print(list(persons.keys())) # ['620001', '620002', '620004', '620005']
print(list(persons.values())) # ['建华', '宗鑫', '武茏', '诗瑶']
print(list(persons.items())) # [('620001', '建华'), ('620002', '宗鑫'), ('620004', '武茏'), ('620005', '诗瑶')]
for id, name in persons.items():
print(id, name)
'''
620001 建华
620002 宗鑫
620004 武茏
620005 诗瑶
'''
del persons['620001']
print(persons) # {'620002': '宗鑫', '620004': '武茏', '620005': '诗瑶'}
persons.clear()
print(persons) # {}
可变与不可变
- 数据类型: str int float bool list tuple set dict
- 可变和不可变:
- 不可变:只要改变变量的值,如果变量的地址发生了改变,则认为是不可变 int,str,float,bool,tuple
- 可变:变量的内部无论发生怎样的改变,地址都不发生改变,则认为是允许改变 list set dict
- copy():类似备份
备份的地址跟原空间的地址是不一样
list1 = [1, 2, 3]
print(id(list1)) # 4366699784
list1.remove(2)
print(id(list1)) # 4366699784
list2 = list1
print(id(list2)) # 4366699784
list2.append(6)
print(list1, list2) # [1, 3, 6] [1, 3, 6]
print(id(list1), id(list2)) # 4366699784 4366699784
list1.remove(1)
print(list1, list2) # [3, 6] [3, 6]
print(id(list1), id(list2)) # 4366699784 4366699784
del list1
print(list2) # [3, 6]
print(id(list2)) # 4366699784
list1 = [1, 2, 3, 4, 5]
list2 = list1.copy()
print(id(list1), id(list2)) # 4562955528 4562955464
print(list1, list2) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
del list1
print(list2) # [1, 2, 3, 4, 5]
print(id(list2)) # 4562955464
dict1 = {1: 'aa', 2: 'bb', 3: 'cc'}
dict2 = dict1.copy()
dict3 = dict1
print(id(dict1), id(dict2), id(dict3)) # 4414712064 4414712136 4414712064
print(dict1, dict2, dict3) # {1: 'aa', 2: 'bb', 3: 'cc'} {1: 'aa', 2: 'bb', 3: 'cc'} {1: 'aa', 2: 'bb', 3: 'cc'}
del dict1
print(id(dict2), id(dict3)) # 4414712136 4414712064
print(dict2, dict3) # {1: 'aa', 2: 'bb', 3: 'cc'} {1: 'aa', 2: 'bb', 3: 'cc'}
n = 8
print(id(n)) # 4308764832
n = 5
print(id(n)) # 4308764736
s = 'hello'
print(id(s)) # 4311136608
s = 'helloworld'
print(id(s)) # 4312845424
f = 9.9
print(id(f)) # 4310221496
f = 8.96
print(id(f)) # 4310221016
t = (1, 2, 3)
print(id(t)) # 4312778360
t = (1, 2, 3, 4)
print(id(t)) # 4312755080
list1 = [1, 2, 3, 4, 5]
print(id(list1)) # 4312632584
list1.append(8)
list1.append(9)
list1.append(7)
print(id(list1)) # 4312632584
set1 = {4, 5, 7, 8}
print(id(set1)) # 4311400520
set1.add(1)
set1.add(2)
set1.add(3)
print(id(set1)) # 4311400520
dict1 = {1: 'aa'}
print(id(dict1)) # 4311148800
dict1[2] = 'bb'
dict1[3] = 'cc'
print(id(dict1)) # 4311148800
dict1.pop(1)
print(id(dict1)) # 4311148800