目录
1、集合(set)
1.1、集合的定义
1.1.1、方法一:set() 类型转换
>>> a=[1,2,3,4]
>>> a.append(1) #列表a增加一个1
>>> a
[1, 2, 3, 4, 1]
>>> b=set(a) #定义集合,这里可看出,集合里的元素是唯一的
>>> b
{1, 2, 3, 4}
1.1.2、方法二:直接定义
>>> c={0,1,2,3,4}
>>> c
{0, 1, 2, 3, 4}
1.2、集合运算
S1 和 S2 交集: B
S1 和 S2 并集: A + B + C
S1 和 S2 差集: A或C
1.2.1、交集“&”
>>> s1 = {1,2,3,4,5}
>>> s2 = {3,4,5,6,7,8}
>>> s1 & s2 #集合交集
{3, 4, 5}
1.2.2、并集“|”
>>> s1 = {1,2,3,4,5}
>>> s2 = {3,4,5,6,7,8}
>>> s1 | s2 #集合并集
{1, 2, 3, 4, 5, 6, 7, 8}
1.2.3、差集“-”
>>> s1 = {1,2,3,4,5}
>>> s2 = {3,4,5,6,7,8}
>>> s1 - s2 #集合差集
{1, 2}
>>> s2 - s1 #集合差集
{8, 6, 7}
#特别的,当b属于a时,b - a差集是空集,结果以set()表示,而不是{},因为{}表示的是字典
>>> a = {1,2,3,4}
>>> b = {3,4}
>>> b - a
set()
1.3、集合的增删改查
1.3.1、增:add
>>> a = {1,2,3,4}
>>> a.add(5,6) #add后只能增加一个元素,超过一个会报错
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
a.add(5,6)
TypeError: add() takes exactly one argument (2 given)
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
>>> id(a)
49452424
>>> a.add('hello world')
>>> a
{1, 2, 3, 4, 5, 'hello world'}
>>> id(a)
49452424
1.3.2、删:
(1)pop:根据哈希算法,随机删除
>>> a = {1, 2, 3, 4, 5, 33, 7, 8, 'o', 'r', 11, 44, 'l', 'hello world', 9, 'd', 'w', 10, 22}
>>> a.pop() #根据哈希算法,随机的删除
1
>>> a.pop()
2
>>> a.pop()
3
#重新定义集合说明,pop是随机删除的
>>> se = {'w','o','r','l','d'}
>>> se.pop()
'r'
>>> se.pop()
'o'
(2)remove:删除指定对象
>>> a = {'hello world', 9, 'd', 'w', 10, 22}
>>> a.remove(9)
>>> a
{'hello world', 'd', 'w', 10, 22}
>>> a.remove('w')
>>> a
{'hello world', 'd', 10, 22}
1.3.3、改:update(可迭代对象)
>>> a = {1,2,3,4,5}
>>> a.update({11,22,33,44}) #迭代增加对象是集合,无序增加
>>> a
{1, 2, 3, 4, 5, 33, 11, 44, 22}
>>> a.update([7,8]) #迭代增加对象是列表
>>> a
{1, 2, 3, 4, 5, 33, 7, 8, 11, 44,22}
>>> a.update((9,10)) #迭代增加对象是元组
>>> a
{1, 2, 3, 4, 5, 33, 7, 8, 'o', 'r', 11, 44, 'l', 9, 'd', 'w', 10, 22}
>>> a.update('world') #迭代增加对象是字符串
>>> a
{1, 2, 3, 4, 5, 33, 7, 8, 'o', 'r', 11, 44, 'l', 'd', 'w', 22}
1.3.4、查
(1)isdisjoint:有交集返回False
>>> s1 ={1,2,3,4,5}
>>> s2 = {4,5}
>>> s1 .isdisjoint(s2) #判断s1和s2是否没有交集,有交集返回False
False
>>> s2.isdisjoint(s1)
False
>>> s3 = {6,7,8}
>>> s2.isdisjoint(s3) #判断s3和s2是否没有交集,没有交集返回TRUE
True
>>> s3.isdisjoint(s2)
True
>>>
(2)issubset:判断前者是否包含于后者中(判断后者是否包含前者)
>>> s1 = {1,2,3,4,5}
>>> s2 = {4,5}
>>> s1.issubset(s2) #判断s1的元素是否都包含在s2中
False
>>> s2.issubset(s1) #判断s2的元素是否都包含在s1中
True
(3)issuperset:判断前者是否包含后者
>>> s1 = {1, 2, 3, 4, 5}
>>> s2 = {4, 5}
>>> s1.issuperset(s2) #s1的元素是否包含s2的元素
True
>>> s2.issuperset(s1) #s2的元素是否包含s1的元素
False
1.4、集合特性
(1)唯一性:集合汇总的元素不能存在两个相同的元素,所有元素具有唯一性
>>> s1 = {1,2,3,4}
>>> s1.add(1) #从集合增的方法看,重复元素是无法加入到集合的
>>> s1
{1, 2, 3, 4}
>>> s2 = {2,3,4,5,7,8,9}
>>> s1 | s2 #从集合的并集也能看出,集合的唯一性
{1, 2, 3, 4, 5, 7, 8, 9}
(2)无序性:集合中的元素是无序的,即不存在索引值
(3)可变性:集合是可变的对象
2、字典
2.1、字典的定义和使用
2.1.1、方法一:键值对形式
>>> zd = {'a':'jack','b':'12'}
>>> zd
{'a': 'jack', 'b': '12'}
2.1.2、方法二:dic函数
>>> zd1 = dict(a='jack',b='12')
>>> zd1
{'a': 'jack', 'b': '12'}
2.1.3、定义的修改和添加
>>> zd = dict(a='jack',b='12')
>>> zd['a']='tom' #字典中存在‘a’这个键,所以就修改对应的value值
>>> zd
{'a': 'tom', 'b': '12'}
>>> zd['c']='china' #字典中不存在‘c’,就增加这个键值对
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china'}
2.2、字典的增删改查
2.2.1、增
(1)copy 复制
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china'}
>>> zd1 = zd.copy()
>>> zd1
{'a': 'tom', 'b': '12', 'c': 'china'}
>>> id(zd)
50293928
>>> id(zd1)
49592000
>>> id(zd['a'])
50264024
>>> id(zd1['a']) #字典的copy方法只改变了引用,未改变内存
50264024
(2)fromkeys 创建新的字典,新字典中的键值跟原先的一样,若给出value值,则按照给出的输出;如果未给出value值则默认为None
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> dict.fromkeys(zd)
{'a': None, 'b': None, 'c': None, 6: None, 7: None}
>>> dict.fromkeys(zd,10)
{'a': 10, 'b': 10, 'c': 10, 6: 10, 7: 10}
(3)setdefault 有则查,无则增
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china'}
>>> zd3 = zd.setdefault('c',11) #这里逗号后的可以为任何元素
>>> zd3
'china'
>>> zd3 = zd.setdefault('c') #这里逗号后的也可以不出现
>>> zd3
'china'
>>> zd3 = zd.setdefault(5,1414233) #如果查找的键值不存在,则会将查询内容为新的键值对加入字典
>>> zd3
1414233
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 1414233}
>>> zd3 = zd.setdefault(6) #如果查找的键值不存在,且逗号后也没有输入任何元素,会储存为新的键值对,但是对应的value值为None
>>> zd3
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 1414233, 6: None}
2.2.2、删
(1)clear 清空
>>> zd1 = {'a': 'tom', 'b': '12', 'c': 'china'}
>>> zd1.clear()
>>> zd1
{}
(2)pop删除指定键值key对应的value值
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 999, 6: 111}
>>> zd.pop(5)
999
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 6: 111}
(3)popitem随机删除一个键值对
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> zd.popitem()
(7, 555)
2.2.3、改:update更新字典
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 5: 1414233, 6: None}
>>> zd.update({5:999})
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 999, 6: None}
>>> zd.update({5:999,6:111})
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 999, 6: 111}
>>> zd.update({5:999,6:111,7:555})
>>> zd
{'a': 'tom', 'b': '12', 'c': 'china', 5: 999, 6: 111, 7: 555}
2.2.4、查
(1)get查询key对应的value值
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> zd4 = zd.get(6)
>>> zd4
111
>>> zd4 = zd.get('tom')
>>> zd4
(2)keys取出字典中所有的key值
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> zd4 = zd.keys()
>>> zd4
dict_keys(['a', 'b', 'c', 6, 7])
>>> type(zd4)
<class 'dict_keys'>
(3)values取出字典中所有的values值
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> zd5 = zd.values()
>>> zd5
dict_values(['tom', '12', 'china', 111, 555])
>>> type(zd5)
<class 'dict_values'>
(4)items取出字典中的所有的键值对
>>> zd = {'a': 'tom', 'b': '12', 'c': 'china', 6: 111, 7: 555}
>>> zd6=zd.items()
>>> zd6
dict_items([('a', 'tom'), ('b', '12'), ('c', 'china'), (6, 111), (7, 555)])
>>> type(zd6)
<class 'dict_items'>
2.3、字典特性
(1)唯一性:字典中的key值具有唯一性,字典中不能存在两个一样的key值
(2)有序性:字典从Python3.6版本后变成有序
(3)可变性:字典是可变对象,但是字典的key值必须是不可变对象