码迷,mamicode.com
首页 > 编程语言 > 详细

Python 数据类型之 集合 set

时间:2018-11-08 23:25:59      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:class   自动   style   err   list   clear   可变   切片   define   

####集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

1.去重,把一个列表变成集合,就自动去重了。

2.关系测试,测试两组数据之前的交集、差集、并集等关系。

#创建集合

##创建集合
set1 = set({1,2,3})
print(set1)
set2 = {1,2,3,[1,2],{"name":"span"}}#集合里的元素必须是不可变数据类型
print(set2)

>>>{1, 2, 3}
>>>TypeError: unhashable type: list

##在集合中增加元素:#在集合中增加元素set.add() ;set.update()

#在集合中增加元素set.add()  set.update()
set3 = {"span","金融","Fore"}
set3.add("量化交易")
print(set3)
set3.update("量化交易") #迭代地添加
print(set3)
>>>{span, 金融, 量化交易, Fore}
>>>{, , 量化交易, Fore, , span, 金融, }

###删除集合的元素

#set.pop()随机删除

#删除,set.pop()  随机地删除
set4 = {"span","金融","Fore"}
set4.pop()
print(set4)
>>>{"span","Fore"}

#set.remove() 按元素删除

# set.remove() 按元素删除
set4 = {"span","金融","Fore"}
set4.remove("span") #按元素删除,没有会报错
print(set4)
>>>{Fore, 金融}

#set.clear() 清空集合 返回set()

set5 = {"span","金融","Fore"}
set5.clear()
print(set5)
>>>set()  ##因为空字典的返回类型是{},因此空集合的返回类型是set()

##删除整个集合 del set

# del 删除
set6 = {"span","金融","Fore"}
del set6
print(set6)

>>>NameError: name set6 is not defined
#查找集合中的元素 由于集合数据类型没有顺序不能采用索引及切片,并且也没有键值对
#因此只能采用for 循环来进行查找
#查找集合中的元素 由于集合数据类型没有顺序不能采用索引及切片,并且也没有键值对
#因此只能采用for 循环来进行查找
set7 = {"span","金融","Fore"}
for i in set7:
    print(i)
>>>
金融
span
Fore

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

集合的特别之处在于可以求集合的交集、并集、补集(反交集)

#交集 & 或者 intersection()

#集合的交集
set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,9,10}
print(set1 & set2)
print(set1.intersection(set2))
>>>{4, 5, 6}
>>>{4, 5, 6}

#并集 |   或者 union()

# 并集
set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,9,10}
print(set1 | set2)
print(set1.union(set2))

>>>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

##补集(反交集) ^ 或者 symmetric_difference()

##补集
set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,9,10}
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
>>>{1, 2, 3, 7, 8, 9, 10}
>>>{1, 2, 3, 7, 8, 9, 10}

#差集- 或者 difference

#差集
set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,9,10}
print(set1 - set2) # set1中独有的而set2中没有的
print(set1.difference(set2))

>>>{1, 2, 3, 7, 8}
>>>{1, 2, 3, 7, 8}

##包含关系 子集合 

set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,}
print(set1 > set2) # set1包含set2,set2 是set1的子集; set1是 set2的超集
print(set2.issubset(set1))
>>>True
>>>True

###超集

set1 = {1,2,3,4,5,6,7,8}
set2 = {4,5,6,}
print(set2 < set1) # set1包含set2,set1 是set2的超集
print(set1.issuperset(set2))
>>>True
>>>True

######

##补充:集合数据类型可以去重

# 去重
li = [1,2,3,4,33,3,88,2]
set1= set(li)
print(set1)
li = list(set1)
print(li)
>>>{1, 2, 3, 4, 33, 88}
>>>[1, 2, 3, 4, 33, 88]
#集合数据类型是可变数据类型,frozenset()是不可变数据类型
s = frozenset("span")
print(s,type(s))
>>>frozenset({‘a‘, ‘s‘, ‘n‘, ‘p‘}) <class ‘frozenset‘>

Python 数据类型之 集合 set

标签:class   自动   style   err   list   clear   可变   切片   define   

原文地址:https://www.cnblogs.com/shaopan/p/9932343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!