python集合(set)

集合

1. 概念

集合(set):把不同的元素组成一个类似列表的序列集,是python的基本数据类型,只是其中的元素是无序和不可重复的,并且元素是可哈希的(整个set集合是可变的,不可哈希的),类似与字典中的key 值

 

2. 集合是一个无序的,不重复的数据组合,它的主要作用如下:

·去重,把一个有序列(如:列表,元组)变成一个集合,就会自动去重,例如:set([1,2,2,3])

·关系测试,测试两组数据的交集,差集,并集等关系

注意:集合的声明只有一种形式:set(参数为:有序列(如:列表,元组)),例如:set([1,2,2,3])

注意:集合中元素必须是可哈希的,但是集合本身是不可哈希的

 

3. 集合分类:可变集合、不可变集合

1.可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素

2.不可变集合(frozenset):与上面恰恰相反

定义声明

 

#定义声明集合
li = [12,23,"abolv"]
s = set(li)
s2 = {12,23,"abolv"}
print(s)
print(type(s))
print(s2)
print(type(s2))
# {'abolv', 12, 23}
# <class 'set'>
# {'abolv', 12, 23}
# <class 'set'>

 

集合访问

由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。

#访问集合
li = ["abolv",24,"male"]
s = set(li)

print("abolv" in s)
for i in s :
    print(i,end=" ")
# True
# 24 male abolv 

更新集合

s.add()
s.update()
s.remove()

注意只有可变集合才能更新:

li = ["abolv",24,"male"]
s = set(li)

s.add("puker")
print(s)
s.update("pythoner") # 字符串中的字符作为元素添加,添加多个元素
print(s)

s.update(["python","student"])
print(s)
# {24, 'male', 'puker', 'abolv'}
# {'n', 'h', 'o', 'r', 'p', 'y', 'puker', 'e', 't', 24, 'male', 'abolv'}
# {'n', 'h', 'o', 'r', 'p', 'python', 'y', 'puker', 'e', 't', 24, 'male', 'student', 'abolv'}

lis = ["abolv",24,"male"]
ss = set(li)
ss.remove("male")
print(ss)
# {24, 'abolv'}

 

 

del:删除集合本身

 

1.去重

#去重
# a = [1,2,2,3,4,"hello","world"]
# b = set(a)
# print(b)
#结果:控制台输出
# {1, 2, 3, 4, 'world', 'hello'}

#元素属于不可哈希出错
# a = [[1,2,2],3,4,"hello","world"]
# b = set(a)
#结果:控制台输出
# TypeError: unhashable type: 'list'

 2.集合关系

集合类型操作符

1 .in ,not in
2 .集合等价与不等价(==, !=)
3 .子集、超集

# 子集 超集判断
s = set("abolv_puker")
ss = set("abolv")
print(ss in s)
print(ss < s)
# False
# True

 

并集 |

#并集
s = set(["abolv","male",18])
ss = set(["puker","male",24])

res = s | ss  # ===> res = s.union(ss)
print(res)
# {18, 24, 'puker', 'abolv', 'male'}

 

#去重之后的并集
a = set([1,2,3,4])
b = set([3,4,5,6])
print(a | b)
# print(a.union(b))#符号|
#结果:控制台输出
# {1, 2, 3, 4, 5, 6}

 

交集&

复制代码
#交集
s = set(["abolv","male",18])
ss = set(["puker","male",24])

res = s & ss # =====> res = s.intersection(ss)
print(res)
# {'male'}
复制代码

 

#集合交集
# a = set([1,2,3,4])
# b = set([3,4,5,6])
# print(a.intersection(b))#符号&
#结果:控制台输出
# {3, 4}

 

差集 -

复制代码
#差集
s = set(["abolv","male",18])
ss = set(["puker","male",24])

res = s - ss #=====> res = s.difference(ss)
print(res)
# {18, 'abolv'}
复制代码

 

#集合差集
# a = set([1,2,3,4])
# b = set([3,4,5,6])
# print(a.difference(b))#符号-
#结果:控制台输出
# {1, 2}

 

对称差集 ^

复制代码
#对称差集
s = set(["abolv","male",18])
ss = set(["puker","male",24])

res = s ^ ss    # =========>  res = s.symmetric_difference(ss)
print(res)
# {18, 'abolv', 'puker', 24}
复制代码

 

#集合对称差集(异或)
# a = set([1,2,3,4])
# b = set([3,4,5,6])
# print(a ^ b)
# print(a.symmetric_difference(b))#符号^
#结果:控制台输出
# {1, 2, 5, 6}

 

posted @ 2018-08-30 15:01  zwyk  阅读(63)  评论(0)    收藏  举报