一、集合
集合内数据无序,即无法使用索引和分片 集合内部数据元素具有唯一性,可以用来排除重复数据 集合内的数据,字符串,整数,浮点数,元组,冰冻集合等,不能是列表和一般集合,即内部只能放置可哈希数据(即不可变类型)
set1 = {'a', 2, 2.5, (2,3,'a')}
1.集合的简单操作
>>> 'a' in set1
True
>>>'b' not in set1
True
>>>for i in set1:
print(i, end=' ')
2 2.5 a (2, 3, 'a')
# 带元组的集合遍历
>>>s = {(1,2,3),('a','b','c'),(4,5,6)}
>>>for l,m,n in s:
print(l,'--',m,'--',n)
4 -- 5 -- 6
a -- b -- c
1 -- 2 -- 3
>>>s={1,2,2,5,6,5,4,4}
>>>s
{1, 2, 4, 5, 6}
2.集合函数
len(s), max(s), min(s) 函数与基本函数一致 set(l): 生成集合
>>>l = [1,2,3,5,2,6,1]
>>>s = set(l)
>>>s
{1,2,5,3,6}
s.add(x): 向集合中添加元素 s.clear(): 原地清空集合的数据 s.copy(): 拷贝集合产生新的集合,对副本的操作不影响原来的集合 s.remove(x): 原地移除指定元素,如果指定元素不存在,则报错 s.discard(x): 原地移除指定元素,如果指定元素不存在,也不会报错 s.pop(): 随机移除一个元素 s1.intersection(s2): 求交集函数 s1.difference(s2): 求差集 s1.union(s2): 求并集
>>>s1 = {1,2,3,4,5,6}
>>>s2 = {5,6,7,8,9}
>>>s1.intersection(s2)
{5,6}
>>>s1.difference(s2)
{1,2,3,4}
>>>s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.issubset(s2): 检查集合 s1 是否是集合 s2 的子集,返回布尔值 s1.issuperset(s2): 检查集合 s1 是否是集合 s2 的超集,返回布尔值 集合的数学操作:
>>>s1 = {1,2,3,4,5,6}
>>>s2 = {5,6,7,8,9}
>>>s1 - s2
{1,2,3,4}
>>>s1 + s2 #不能执行加法操作
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-34-07ecabcb1b41>", line 1, in <module>
s1 + s2
TypeError: unsupported operand type(s) for +: 'set' and 'set'
3.冰冻集合 frozenset
冰冻集合是不能进行任何修改(包括以上所有集合操作)的集合,是一种特殊的集合
>>>s = frozenset(('a','hello',3))
>>>s
frozenset({3, 'a', 'hello'})
二、字典
字典是一种组合数据,没有顺序的组合数据,数据以键值对形式出现
# 字典的构造方式
>>> dict1 = {}
>>> dict2 = dict()
>>> dict3 = {"one":1,"two":2,"three":3}
>>> dict4 = dict(one=1,two=2,three=3)
>>> dict5 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> dict6 = dict([('two', 2), ('one', 1), ('three', 3)])
>>> dict7 = dict({'three': 3, 'one': 1, 'two': 2})
>>> dict3 == dict4 == dict5 == dict6 == dict7
True
1.字典特征
字典是序列类型,但是是无序序列,所以没有分片和索引 字典中的数据每个都有键值对组成,即k-v对 key: 必须是可哈希的值,比如int,string,float,tuple, 但是,list,set,dict 不行 value: 任何值
2.字典操作
>>> dict1 = {"one":1,"two":2,"three":3}
>>>dict1['one']
1
>>>dict1['one'] = 'one'
>>dict1
{'one': 'one', 'three': 3, 'two': 2}
>>> del dict1['one']
>>>dict1
{'three': 3, 'two': 2}
#成员检测的是 key 的内容
>>> if 'two' in dict1:
print('True')
True
>>> dict1 = {'one':1,'two':2}
>>> for k in dict1.keys(): # 按键值遍历
>>> print(k,end=' ')
one two
>>> for v in dict1.values(): # 只访问字典的值
>>> print(v,end=' ')
1 2
>>> for k,v in dict1.items():
>>> print(k,v)
one 1 two 2
3.字典函数
len(d)、max(d)、min(d)、dict(d)、d.clear() d.get(k): 按指定的键值 k 返回相应的字典值,如果没有这个 k ,可以指定返回的默认值
>>> dict1 = {'one':1,'two':2}
>>>dict1.get('one')
1
>>>dict1.get('three', 'meiyou')
'meiyou'
d.fromkeys: 用指定的序列作为键,用一个值作为字典所有键的值
>>> l = ["eins", "zwei", "drei"]
>>> d = dict.fromkeys(l, "hahahahahah")
>>> print(d)
{'eins': 'hahahahahah', 'zwei': 'hahahahahah', 'drei': 'hahahahahah'}
4.字典推导式
字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典。
>>> codes = [(86,'China'),(91,'India'),(1,'USA'),(55,'Brazil'),(81,'Japan')]
>>> dict01 = dict(codes)
>>> dict01
{86: 'China', 91: 'India', 1: 'USA', 55: 'Brazil', 81: 'Japan'}
>>> dict02 = {country: code for code, country in codes}
>>> dict02
{'China': 86, 'India': 91, 'USA': 1, 'Brazil': 55, 'Japan': 81}
>>> dict03 = {code: country.upper() for country, code in dict02.items()}
>>> dict03
{86: 'CHINA', 91: 'INDIA', 1: 'USA', 55: 'BRAZIL', 81: 'JAPAN'}