900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python基本数据类型之集合set

python基本数据类型之集合set

时间:2024-01-29 09:41:29

相关推荐

python基本数据类型之集合set

一、集合的定义

set集合,是一个无序且不重复的元素集合。

集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

二、集合的创建

s = set()s = {11,22,33,44}*注:创建空集合时,只能用set(),如果用第二种方法s={},创建的实际上是一个空字典。s = {}print(type(s))<class "dict">

a=set("boy")b=set(["y", "b", "o","o"])c=set({"k1":"v1","k2":"v2"})d={"k1","k2","k2"}e={("k1", "k2","k2")}print(a,type(a))print(b,type(b))print(c,type(c))print(d,type(d))print(e,type(e))执行结果如下:{"o", "b", "y"} <class "set">{"o", "b", "y"} <class "set">{"k1", "k2"} <class "set">{"k1", "k2"} <class "set">{("k1", "k2", "k2")} <class "set">

三、集合的功能

源码

基本功能:

增加

a=set("python")a.add("tina")print(a)b=set("python")b.update("tina")print(b)执行结果如下:{"tina", "o", "p", "n", "t", "y", "h"}{"o", "i", "p", "a", "n", "t", "y", "h"}##################由以上代码可以看出,add是单个元素的添加,而update是批量的添加。输出结果是无序的,并非添加到尾部。

删除(remove,discard,pop)

c={"p", "i", "h", "n", "o", "y", "t"}c.remove("p")print(c)

c={"p", "i", "h", "n", "o", "y", "t"}

c.discard("p")

print(c)c={"p", "i", "h", "n", "o", "y", "t"}

c.pop()

print(c)执行结果如下: {"i", "h", "t", "o", "y", "n"}

#####

当执行c.remove("p","i")和c.discard("p","i")时,报错:TypeError: remove() takes exactly one argument (2 given),说明remove和discard删除元素时都只能一个一个的删,同add对应。

#################################################################################

remove,pop和discard的区别:

discard删除指定元素,当指定元素不存在时,不报错;

remove删除指定元素,但当指定元素不存在时,报错:KeyError。

pop删除任意元素,并可将移除的元素赋值给一个变量,不能指定元素移除。

清空

c={"p", "i", "h", "n", "o", "y", "t"}c.clear()print(c)执行结果如下:set()

set的特有功能:

s1 = {0}s2 = {i % 2 for i in range(10)}s = set("hi")t = set(["h", "e", "l", "l", "o"])print(s.intersection(t), s & t) # 交集print(s.union(t), s | t) # 并集print(s.difference(t), s - t) # 差集print(s.symmetric_difference(t), s ^ t) # 对称差集print(s1.issubset(s2), s1 <= s2) # 子集(被包含)print(s1.issuperset(s2), s1 >= s2) # 父集(包含)执行结果如下:{"h"} {"h"}{"i", "e", "h", "l", "o"} {"i", "e", "h", "l", "o"}{"i"} {"i"}{"e", "l", "o", "i"} {"e", "l", "o", "i"}True TrueFalse False

s = {11,22,33}t = {22,44}print(s.isdisjoint(t))#(disjoint脱节的,)即如果没有交集,返回True,否则返回Falses.difference_update(t)#将差集覆盖到源集合,即从当前集合中删除和B中相同的元素print(s)执行结果如下:False{33, 11}s = {11,22,33}t = {22,44}s.intersection_update(t)#将交集覆盖到源集合print(s)执行结果如下:{22}s = {11,22,33}t = {22,44}s.symmetric_difference_update(t)#将对称差集覆盖到源集合print(s)执行结果如下:{33, 11, 44}

四、集合的转换

se = set(range(4))li = list(se)tu = tuple(se)st = str(se)print(li,type(li))print(tu,type(tu))print(st,type(st))执行结果如下:[0, 1, 2, 3] <class "list">(0, 1, 2, 3) <class "tuple">{0, 1, 2, 3} <class "str">

五、练习题

寻找差异:哪些需要删除?哪些需要新建?哪些需要更新?

# 数据库中原有old_dict = { "#1":{ "hostname":c1, "cpu_count": 2, "mem_capicity": 80 }, "#2":{ "hostname":c1, "cpu_count": 2, "mem_capicity": 80 } "#3":{ "hostname":c1, "cpu_count": 2, "mem_capicity": 80 }} # cmdb 新汇报的数据new_dict = { "#1":{ "hostname":c1, "cpu_count": 2, "mem_capicity": 800 }, "#3":{ "hostname":c1, "cpu_count": 2, "mem_capicity": 80 } "#4":{ "hostname":c2, "cpu_count": 2, "mem_capicity": 80 }}

注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新

del_dict = set(old_dict).difference(set(new_dict))add_dict = set(new_dict).difference(set(old_dict))update_dict = set(new_dict).intersection(set(old_dict))print(del_dict)print(add_dict)print(update_dict)执行结果如下:{"#2"}{"#4"}{"#3", "#1"}

#!/usr/bin/python# -*- coding:utf-8 -*-old_dict = { "#1": {"hostname": "c1", "cpu_count": 2, "mem_capicity": 80}, "#2": {"hostname": "c1", "cpu_count": 2, "mem_capicity": 80}, "#3": {"hostname": "c1", "cpu_count": 2, "mem_capicity": 80},}new_dict = { "#1": {"hostname": "c1", "cpu_count": 2, "mem_capicity": 800}, "#3": {"hostname": "c1", "cpu_count": 2, "mem_capicity": 80}, "#4": {"hostname": "c2", "cpu_count": 2, "mem_capicity": 80},}new_set = set()old_set = set()for i in new_dict: new_set.add(i)for j in old_dict: old_set.add(j)new_add = new_set.difference(old_set) #new_dict中有,old_dict中没有old_del = old_set.difference(new_set) #old_dict中有,new_dict中没有update = new_set.intersection(old_set) #old_dict和new_dict共同有的,需要把new_dict更新到old_dict中for k in new_add: old_dict[k] = new_dict[k] #将new_dict中新增的内容添加到old_dict中for v in old_del: del old_dict[v] #将old_dict中失效的内容删除for m in update: old_dict[m] = new_dict[m] #把new_dict更新到old_dict中print(old_dict)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。