Python基础——第五章 散列类型 集合及字典

目录

1、集合(set)

1.1、集合的定义

1.1.1、方法一:set() 类型转换

1.1.2、方法二:直接定义

1.2、集合运算

1.2.1、交集“&”

1.2.2、并集“|”

1.2.3、差集“-”

1.3、集合的增删改查

1.3.1、增:add

1.3.2、删:

1.3.3、改:update(可迭代对象)

1.3.4、查

1.4、集合特性

2、字典

2.1、字典的定义和使用

2.1.1、方法一:键值对形式

2.1.2、方法二:dic函数

2.2、字典的增删改查

2.2.1、增

2.2.2、删

2.2.3、改:update更新字典

2.2.4、查

2.3、字典特性


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值必须是不可变对象

猜你喜欢

转载自blog.csdn.net/weixin_44435602/article/details/114435525