python集合数据类型_Python—数据类型之集合(Set)

1.集合是一个无序的,且不重复元素的集合。它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

2.基本功能包括关系测试和消除重复元素。注意:集合存在的意义就是去重和关系运算。

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

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

3.集合中的三个特征

确定性(元素必须是可hash)

互异性(去重)

无序性(集合中的元素没有先后之分)如集合{1,2,3}和集合{2,3,1}算作一个集合

集合的创建

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。大括号也不可以创建元素含有字典与列表的集合。

创建set需要一个list或者tuple或者dict作为输入集合。其中重复元素在set中会自动过滤。

集合可以通过可迭代对象(字符串、元组、列表等)进行创建;集合中的元素不可重复;集合中的元素无序排列。

创建空的集合:s = set(),不能用 { } 来创建空集合。

创建非空集合:s = {1,2,3,4},或者 s = set(iterable)。

# 创建空集合

set1 = set()

print(set1, type(set1)) # (set([]), )

# 创建非空集合

set1 = {1, 2, 2}

print(set1, type(set1)) # (set([1, 2]), )

set2 = set({1, 2, 2})

print(set2, type(set2)) # (set([1, 2]), )

set3 = set('abcdefabcd')

set4 = set(['a','b','c','a'])

set5 = set(('a','b','c','a'))

set6 = set({'a':1, 'b':2})

set7 = set(range(1, 10, 3))

print(set3, type(set3)) # (set(['a', 'c', 'b', 'e', 'd', 'f']), )

print(set4, type(set4)) # (set(['a', 'c', 'b']), )

print(set5, type(set5)) # (set(['a', 'c', 'b']), )

print(set6, type(set6)) # (set(['a', 'b']), )

print(set7, type(set7)) # (set([1, 4, 7]), )

# 集合推导式

set1 = {x for x in 'abracdabra' if x not in 'abc'}

print(set1, type(set1)) # (set(['r', 'd']), )

集合的常用方法:见help(set)

添加元素

set1 = {'1', '2'}

set2 = {'1', '2'}

set3 = {'1', '2'}

set1.add('3') # add的作用相当于列表中的append方法,但是添加新元素时,如果存在就不添加。

print set1 # set(['1', '3', '2'])

set2.update('2345') # update 类似于列表中的extend方法,update方法可以支持同时传入多个参数

print set2 # set(['1', '3', '2', '5', '4'])

set3.update(['6', '8'], 'de') # 添加列表到集合,列表元素会被分解为单个元素后添加到集合

print set3 # set(['e', 'd', '1', '2', '6', '8'])

删除元素

s1 = set(['Python','Java','C','C++','C#'])

s2 = set(['Python','Java','C','C++','C#'])

s3 = set(['Python','Java','C','C++','C#'])

s1.remove('C++') # 使用remove(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,则会抛出异常。

s2.discard('C++') # 使用discard(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,不会抛出异常。

print s1 # set(['Python', 'C#', 'C', 'Java'])

print s2 # set(['Python', 'C#', 'C', 'Java'])

print s3.pop() # Python 随机删除一个元素。由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误。

print s3 # set(['C#', 'C', 'Java', 'C++'])

s3.clear() # 清空集合

print s3 # set([])

del s3 # 删除整个集合:del set

print s3 # NameError: name 's3' is not defined

查找元素

s1 = set(['Python','Java','C','C++','C#'])

for i in s1:

print i

集合的运算

交集、并集、补集、差集、子集、超集

in /not in运算符:in等同于字典的in,用于集合中,当某个值存在于集合中,返回True,否则返回False。not in 与in 返回值相反。集合的in / not in 运算符的速度快于序列。

s1 = {1, 2, 3}

s2 = {3, 4, 5}

# 交集 & 或者 intersection()

print s1 & s2 # {3}

print s1.intersection(s2)

# 并集 | 或者 union()

print s1 | s2 # {1, 2, 3, 4, 5}

print s1.union(s2)

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

print s1 ^ s2 # {1, 2, 4, 5}

print s1.symmetric_difference(s2)

# 差集 - 或者 difference()

print s1 - s2 # {1, 2}

print s1.difference(s2)

# 超集>:判断一个集合是另一个集合的超集,使用 >= 也可以

print {1,2,3} > {1,2} # True {1,2,3} 是 {1,2} 的超集

print {1,2,3}.issuperset({1,2})

# 子集<:>

print {1,2} < {1,2,3} # True {1,2} 是 {1,2,3} 的子集

print {1,2}.issubset({1,2,3})

print {1,2,3} == {3,2,1} # True

print {1,2,3} != {3,2,1} # False

print 1 in {1,2,3} # True

print 1 not in {1,2,3} # False

集合的函数

len(x)  max(x)  min(x)  sum(x)  any(x)  all(x)

s1 = {1, 2, 3, 6}

print len(s1) # 4

print max(s1) # 6

print min(s1) # 1

print sum(s1) # 12

print any(s1) # True

print all(s1) # True

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

arry = [1, 2, 3, 4, 6, 3, 8, 2]

set1 = set(arry)

print set1 # {1, 2, 3, 4, 6, 8}

arry = list(set1)

print arry # [1, 2, 3, 4, 6, 8]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值