欢迎来到今天的讨论,我们将探讨,python怎么做gui界面 python gui界面设计,一起探索吧!
文档目录
1. 集合的定义
2. 集合的无序性
3. 集合的去重
4. 集合推导式
5. 集合常用内置函数(并集/交集/差集/增加元素等)
python的集合(set)是一个无序的、不重复元素,可变的序列python学生管理系统实训。
创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合的定义
集合使用大括号{}或者 set() 函数创建集合
setB = {'color','name'}
print(type(setB))
#打印结果
<class 'set'>
setC = set(['color','name'])
print(type(setC))
#打印结果
<class 'set'>
集合的无序性
#定义一个集合
setB = { 'orange', 'apple', 'pear', 'banana'}
print(setB)
#打印结果 :元素顺序是不一致的
{'pear', 'apple', 'orange', 'banana'}
集合底层采用的是哈希表结构,集合的元素都是可以使用内置函数hash()得到一个整数值
比如集合中的元素为字符串,hash值如下
print(hash('orange'))
print(hash('apple'))
#打印结果
-呵呵73579605
-2590632636591016521
但有些常用的数据类型,比如列表list、字典dict是可变的,不是可哈希的对象,是不能添加为集合元素的。
添加列表到集合会报错
([1,2,3])
#报错如下
Traceback (most recent call last):
File "", line 12, in <module>
([1,2,3])
TypeError: unhashable type: 'list'
添加字典到集合会报错
({'key':'value'})
#报错如下
Traceback (most recent call last):
File "", line 13, in <module>
({'key':'value'})
TypeError: unhashable type: 'dict'
但是可添加元组到集合,因为元组是不可变数据类型。
((1,23,2))
print(setB)
#打印结果
{'apple', 'pear', 'banana', 'orange', (1, 23, 2)}
集合的去重
集合内的元素是不重复的,所以往往用于将列表、元组的去重
比如将列表A的元素去重
listA = ['orange', 'apple', 'pear', 'banana','orange']
listB = set(listA)
print(listB)
#打印结果
{'banana', 'pear', 'orange', 'apple'}
去重以后列表内的元素位置被更新,这样就与列表的有序性背道而驰。
我们可以通过有序字典 collections.OrderedDict.fromkeys()功能,对列表去重并保持有序
from collections import OrderedDict
listC = list(OrderedDict.fromkeys(listA))
print(listC)
['orange', 'apple', 'pear', 'banana']
集合推导式
集合与列表/字典类似,也有自己的推导式,结构如下:
{表达式 for 变量 in 列表 if 条件} 其中if条件可有可无
#定义一个集合
setA = {'tom','lili','joy','yhan','jams'}
#通过集合推导式 从集合中获取姓名为4个字母的名字 推导式如下:
setB= {name for name in setA if len(name)==4}
print(f'setB 数据类型:{type(setB)} 内容:{setB}')
#打印结果
setB 数据类型:<class 'set'> 内容:{'yhan', 'lili', 'jams'}
集合的内置函数
添加元素
()和set.update()区别是()只能添加单个元素,而set.update()可添加多个元素,传入的参数必须是可迭代对象,比如列表/元组/字符串等。
setA = {'tom','lili','joy','yhan','jams'}
#添加单个元素
('wang')
#结果如下
{'jams', 'joy', 'lili', 'tom', 'wang', 'yhan'}
#update添加多个可迭代对象的元素
setA.update(['wang','lei'],('xu','ren'),{'key':'value'})
#结果如下
{'key', '12', 'yellow', 'ren', 'color', 'wang', 'xu', 'lei', 'name'}
移除元素
set.remove(元素) 集合中无该元素会报错
set.discard(元素) 集合中无该元素不会报错
() 随机移除集合中的元素
删除集合
使用 del A 删除集合A
清空集合
使用set.clear()移除所有元素,清空集合
集合合并
使用A.union(B) 返回一个新集合
setA = {"name","age","color"}
setB = {"lili","12","yellow"}
setC = setA.union(setB)
print(setC)
#结果如下
{'color', 'lili', '12', 'yellow', 'age', 'name'}
集合获取交集
set.intersection(set1,set2,......) 方法用于返回两个或更多集合中都包含的元素,参数可添加多个集合,并返回新集合
setA = {"name","age","color"}
setB = {"name","12","yellow"}
#判断setA和setB中都存在的元素 并返回setC
setC = setA.intersection(setB)
print(f'setA内容不变 :{setA}')
print(f'setB内容不变 :{setB}')
print(f'setC新集合 :{setC}')
#结果如下:
setA内容不变 :{'color', 'age', 'name'}
setB内容不变 :{'yellow', '12', 'name'}
setC新集合 :{'name'}
set.intersection_update(set1,set2,.....) 方法用于返回两个或更多集合中都包含的元素,参数可添加多个集合,修改原集合,函数结果不返回新集合
setA = {"name","age","color"}
setB = {"name","12","yellow"}
#判断setA和setB中都存在的元素 setA集合内容会更新
setC = setA.intersection_update(setB)
print(f'setA内容变化 :{setA}')
print(f'setB内容不变 :{setB}')
print(f'不返回新集合,setC为 {setC}')
#结果如下:
setA内容变化 :{'name'}
setB内容不变 :{'yellow', 'name', '12'}
不返回新集合,setC为 NonesetA内容不变 :{'color', 'age', 'name'}
集合获取差集
set.difference(set1,set2,......) 方法用于返回集合的差集,即返回的集合元素包含在要判断的集合中,但不包含在其他集合(方法的参数)中,参数可添加多个集合,并返回新集合
setA = {"name","age","color"}
setB = {"name","12","yellow"}
setC = {"age","12","yellow"}
#取差集
setD = setA.difference(setB,setC)
print(f'setA内容不变 :{setA}')
print(f'setB内容不变 :{setB}')
print(f'setC内容不变 :{setC}')
print(f'返回新集合,setD为 {setD}')
#结果如下:
setA内容不变 :{'age', 'color', 'name'}
setB内容不变 :{'yellow', '12', 'name'}
setC内容不变 :{'age', '12', 'yellow'}
返回新集合,setD为 {'color'}
set.difference_update(set1,set2,.....) 用于返回集合的差集,即返回的集合元素包含在要判断的集合中,但不包含在其他集合(方法的参数)中,该方法修改原集合,函数结果不返回新集合
setA = {"name","age","color"}
setB = {"name","12","yellow"}
setC = {"age","12","yellow"}
setD = setA.difference_update(setB,setC)
print(f'setA内容变化 :{setA}')
print(f'setB内容不变 :{setB}')
print(f'setC内容不变 :{setC}')
print(f'返回新集合,setD为 {setD}')
#结果如下:
setA内容变化 :{'color'}
setB内容不变 :{'name', '12', 'yellow'}
setC内容不变 :{'age', '12', 'yellow'}
不返回新集合,setD为 None
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
原文地址1:https://blog.csdn.net/kymppcds/article/details/131867925
参考资料:python中用turtle画一个圆形 https://blog.csdn.net/SXIAOYAN_/article/details/140061099