python数据结构:集合、字典

集合

  注意:

  • 集合是可变的,所有的操作都是改变其本身,也就是说 id(指针的存储路径)是不会改变的,只是改变了内容

  • 集合(set)是一个无序的不重复元素的数据结构。(所以没有下标索引)

  • 集合只有增加、删除、查询(不能用索引),没有修改的方法

  • 可以使用大括号 { } 或者 set() 函数创建集合,但是创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

 1、内置方法

# add 用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作
>>> set1 = {'1', 'a', 'd', 2}
>>> set1.add('1')  # 没有返回值
>>> set1.add(1)
>>> set1
{1, 2, 'd', 'a', '1'}

# update 用于向集合添加元素, 这个和add有区别
>>> set1.add("edf") # add是整体增加
>>> set1
{'edf'}
>>> set1.update("edf") # 拆开来增加
>>> set1
{'d', 'f', 'edf', 'e'}

# remove 删除元素
>>> set1
{'d', 1, 2, 3, 'f', 'e', 'edf'}
>>> set1.remove(1)
>>> set1
{'d', 2, 3, 'f', 'e', 'edf'}

# discard 方法用于移除指定的集合元素。该方法的参数也是只接收一个值
# 注意:该方法不同于remove()方法,因为remove()方法在移除一个不存在的元素时会发生错误,而discard()方法不会。
>>> set4 = {1,2,333,'sd', 'zz'}
>>> set4.discard(1)  # 没有返回值
>>> set4
{2, 'sd', 333, 'zz'}
>>> set4.discard(5)  
>>> set4
{2, 'sd', 333, 'zz'}

# pop 用于随机移除一个元素。
>>> fruits = {"apple", "banana", "cherry"}
>>> fruits.pop()  # 有返回值,返回被删除的那个值
'banana'

# clear 用于移除集合中的所有元素
>>> set2 = {'a', 'b'}
>>> set2.clear() # 没有返回值
>>> set2
set()

 2、符号运算

>>> set1 = {1,2,3}
>>> set2 = {2}
>>> set1 & set2  # 交集
{2}
>>> set1-set2 # 差集
{1, 3}
>>> set1|set2  # 并集
{1, 2, 3}
>>> set1 = {1,2,3,4,5,6}
>>> set2 = {1,3,5,7,9}
>>> set1^set2 # 代表一个存在另一个不存在的
{2, 4, 6, 7, 9}

字典

  备注:

扫描二维码关注公众号,回复: 9796472 查看本文章
  • 字典的键必须是唯一的,如果重复赋值,那么会以最后一个为准

  • key :必须是不可变类型,如:元祖,字符串,数字等,但是 []、{}这种可以变的就不行

  • 可变性:元素值支持增删改查

  • 无序性:没有索引,只有通过键来取值

  • 凡是要归类存储使用字典是最优选择

 内置方法

# 创建字典
>>>dict1 = {}
>>>type(dict1)
<class 'dict'>

#[]通过键来获取值,没有则报错
>>> d7
{'a': '222', 'b': 2, 'c': 3, 'f': 5, 'e': 6, 'name': '南北'}
>>> d7['a']
'222'

# key in d : key是否在d中,是返回True,否则返回False
>>> d7
{'a': '222', 'b': 2, 'c': 3, 'f': 5, 'e': 6, 'name': '南北'}
>>> 'a' in d7
True
>>> 'aa' in d7
False

# get 根据键来获取值,如果没有则返回默认值
>>> d5 = {'python':3.5, 'hello':'world'}
>>> d5.get('python', None)
3.5
>>> d5.get(1,None)

# keys 获取字典的键,并生成迭代器
>>> d5
{'python': 3.5, 'hello': 'world'}
>>> d5.keys()
dict_keys(['python', 'hello'])
>>> list(d5.keys())
['python', 'hello']
>>> tuple(d5.keys())
('python', 'hello')

# values 获取字典所有的值,返回一个可迭代对象
>>> d7
{'a': '222', 'b': 2, 'c': 3, 'f': 5, 'e': 6, 'name': '南北'}
>>> d7.values()
dict_values(['222', 2, 3, 5, 6, '南北'])
>>> list(d7.values())
['222', 2, 3, 5, 6, '南北']
>>>

# items 循环字典所有的key和value,生成一个迭代器
>>> d5
{'python': 3.5, 'hello': 'world'}
>>> d5.items()
dict_items([('python', 3.5), ('hello', 'world')])
>>> list(d5.items())
[('python', 3.5), ('hello', 'world')]
>>> tuple(d5.items())
(('python', 3.5), ('hello', 'world'))
>>> str(d5.items())

# setdefault 无则增,有则查
>>> d7
{'a': 1, 'b': 2, 'c': 3, 'f': 5}
>>> d7.setdefault('e',6)
6
>>> d7.setdefault('a', 2)
1

# update 新增字典:如果键存在那么就去修改值,如果键不存在那么就新增键值对
>>> d7.update(name='南北') # 注意第一个变量必须是形参,不能是实参
>>> d7
{'a': 1, 'b': 2, 'c': 3, 'f': 5, 'e': 6, 'name': '南北'}
>>> d7.update(a='222')
>>> d7
{'a': '222', 'b': 2, 'c': 3, 'f': 5, 'e': 6, 'name': '南北'}
>>> d1 = {1:2,3:4}
>>> d2 = {'a':'a', 'b':'b'}
>>> d1.update(d2)  # 可以添加多个
>>> d1
{1: 2, 3: 4, 'a': 'a', 'b': 'b'}

# pop 根据键删除值,并返回被删除的对象,没有则返回默认值,如果没设置默认值则会报错
>>> d5
{'python': 3.5, 'hello': 'world'}
>>> d5.pop('hello')
'world'
>>> d5.pop(2,3)
3
>>> d5.pop('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
    
# popitem 随机删除一个键值对,并返回被删除的那个键值对
>>> d6 = {'name':'li', 'age':18}
>>> d6.popitem()
('age', 18)

# del 删除字典或者键值对,包括内容和定义
>>> d2 = {'a':1, 'b':2}
>>> del d2['a']
>>> d2
{'b': 2}
>>> del d2
>>> d2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'd2' is not defined
>>>

# clear 清空字典内容,但不清空定义
>>> d1
{'a': 1, 'b': 2}
>>> d1.clear()
>>> d1
{}

# fromkeys 创建一个新字典,fromkeys(*args, **kwargs) 以*args中元素做字典的键,**kwargs为字典所有键对应的值
>>> d5 = {}
>>> d5.fromkeys((1,2))  # 返回一个新的字典
{1: None, 2: None}
>>> d5.fromkeys((3,4), 'a')
{3: 'a', 4: 'a'}
>>> d5.fromkeys((3,4),('b','c'))
{3: ('b', 'c'), 4: ('b', 'c')}


# copy 复制字典
>>> d3 = {'python':3.5, 'hello':'world'}
>>> d4 = d3.copy()
>>> d4
{'python': 3.5, 'hello': 'world'}

猜你喜欢

转载自www.cnblogs.com/su-sir/p/12482000.html