python创建集合set()_Python 集合set

可变集合set

集合set是Python中一种基本数据类型,它分为可变集合(set)和不可变集合(frozenset)两种。类似于其他语言,集合是一个无序不重复元素集,包括创建集合set、向集合中添加元素、删除集合中的元素、求集合的交集、并集、差集等操作。下面就让我们一一来学习集合的这些知识吧。

1、set创建集合

set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

1.1创建空集合

>>> l =  set()

>>> l

set([])

>>> ss = set([])

>>> ss

set([])

>>> st = set(())

>>> st

1.2 创建非空集合

集合中set括号中需要的参数的数据类型有:序列(包括字符串、列表、元组),字典或者是另一个集合,但是不能是数值类型,如int类型。

字符串做参数

>>> s = set('createSet')

>>> s

set(['a', 'c', 'e', 'S', 'r', 't'])

list做参数

>>> s1 = set([1,2,3,1,3,4,5])

>>> s1

set([1, 2, 3, 4, 5])

元组做参数

>>> s2 = set((1,2,3,4,1))

>>> s2

set([1, 2, 3, 4])

字典做参数

>>> s3 = set({1:2,2:3})

>>> s3

set([1, 2])

字典转set集合,需要注意的是,只取了字典的key,相当于将字典中的dict.keys()列表转成set集合。

set集合做参数

>>> s1

set([1, 2, 3, 4, 5])

>>> ss = set(s1)

>>> ss

set([1, 2, 3, 4, 5])

2、集合添加

集合的添加有两种方式,分别是add和update。但是它们在添加元素时是由区别的:

2.1 add()方法

是把要传入的元素作为一个整体添加到集合中,如:

>>> sTest = set('one')

>>> sTest

set(['e', 'o', 'n'])

#添加一个'two'元素,并查看结果

>>> sTest.add('two')

>>> sTest

set(['e', 'two', 'o', 'n'])

2.2 update()方法

是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。如:

>>> sTest

set(['e', 'two', 'o', 'n'])

>>> sTest.update('123')

>>> sTest

set(['e', 'two', 'o', 'n', '1', '3', '2'])

3、集合删除

集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。如:

>>> sTest

set(['e', 'two', 'o', 'n', '1', '3', '2'])

#删除集合中的元素'e'

>>> sTest.remove('e')

>>> sTest

set(['two', 'o', 'n', '1', '3', '2'])

4、集合的遍历  集合的遍历跟序列的遍历方法完全一样。

>>> st = set([1,2,'a','c',4,'d'])

>>> for i in st :

...   print i,

...

a 1 2 4 d c

另一种遍历方式:

>>> for idx, i in enumerate(st) :

...   print idx, i

...

0 a

1 1

2 2

3 4

4 d

5 c

变量idx表示集合中元素i的索引。

5、集合与序列间转换

集合可以和序列之间的转换跟序列之间互转是一样的,唯一不同的就是序列转成集合后,重复的元素被去掉了。

5.1 集合与字符串转换

字符串转集合

>>> s = set('python')

>>> s

set(['h', 'o', 'n', 'p', 't', 'y'])

集合转字符串

>>> str(s)

"set(['h', 'o', 'n', 'p', 't', 'y'])"

需要注意的是,使用str()函数直接对集合转字符串,结果是集合的字符串形式。  我们也可以使用字符串的连接函数join()函数,进行集合转字符串,但是这样得到的字符串种的元素也是无序的。

>>> s = set('python')

>>> s

set(['h', 'o', 'n', 'p', 't', 'y'])

>>> ''.join(s)

'honpty'

5.2 集合与list转换

list转set

>>> list1 = [1,2,3,3,4,5]

>>> sList = set(list1)

>>> sList

set([1, 2, 3, 4, 5])

set转list

>>> list2 = list(sList)

>>> list2

[1, 2, 3, 4, 5]

集合转list结果是得到一个去重后的list,这种去重比用之前讲过的利用字典key唯一和利用list自身特定去重的方法都要简单快捷。

5.3 集合转元组

tuple转set

>>> tup = (1,2,3,3,45,6)

>>> sTup = set(tup)

>>> sTup

set([1, 2, 3, 45, 6])

set转tuple

>>> tup1 = tuple(sTup)

>>> tup1

(1, 2, 3, 45, 6)

set转tuple后,得到的元组也是去重后的元组。

6、集合其他常用方法

6.1 discard()  函数原型:  setVar.discard(element)

参数说明:  setVar :为一个set类型的变量  element :表示要查找并删除的元素  函数作用:

在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。

>>> sList

set([1, 2, 3, 4, 5])

>>> sList.discard(1)

>>> sList

set([2, 3, 4, 5])

6.2 pop()方法

函数原型:  s.pop()  参数说明:  s:为set类型的变量  函数作用:  删除并返回set类型的s中的一个不确定的元素,如果为空引发KeyError错误。

>>> sList

set([2, 3, 4, 5])

>>> sList.pop()

2

>>> sList

set([3, 4, 5])

6.3 clear()

函数原型:  s.clear()  参数说明:  s:set类型的变量  函数作用:  清空s集合中的所有元素

>>> sList

set([3, 4, 5])

>>> sList.clear()

>>> sList

set([])

7、集合的一些操作符

既然是集合,那就会遵循集合的一些操作方法,如求交集、并集、差集等。  7.1 交集  Python中求集合的交集使用的符号是“&”,返回连个集合的共同元素的集合,即集合的交集。

>>> st1 = set('python')

>>> st1

set(['h', 'o', 'n', 'p', 't', 'y'])

>>> st2 = set('htc')

>>> st2

set(['h', 'c', 't'])

>>> st1 & st2

set(['h', 't'])

7.2 并集(合集)  Python中求集合的并集用的是符号“|”,返回的是两个集合所有的并去掉重复的元素的集合。

>>> st1

set(['h', 'o', 'n', 'p', 't', 'y'])

>>> st3 = set('two')

>>> st3

set(['o', 't', 'w'])

>>> st1 | st3

set(['p', 't', 'w', 'y', 'h', 'o', 'n'])

7.3 差集  Python中差集使用的符号是减号“-”。

>>> st1

set(['1', '3', '2', '5', '4', '7', '6'])

>>> st2 = set('4589')

>>> st2

set(['9', '8', '5', '4'])

>>> st1 - st2

set(['1', '3', '2', '7', '6'])

返回的结果是在集合st1中但不在集合st2中的元素的集合。

7.4 集合的不同  查看两个集合的不同之处,使用的difference函数,等价于差集。如:  s1.difference(s3)  这种不同指的是集合s3相对于集合s1,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素组成的新集合。

>>> s1

set([1, 2, 3, 4, 5])

>>> s2

set([1, 2, 3, 4])

>>> s1.difference(s2)

set([5])

>>> s3

set(['1', '8', '9', '5'])

>>> s1.difference(s3)

set([1, 2, 3, 4, 5])

8、集合的范围判断

集合可以使用大于(>)、小于(=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。  定义三个集合s1,s2,s3:

>>> s1

set([1, 2, 3, 4, 5])

>>> s2

set([1, 2, 3, 4])

>>> s3

set(['1', '8', '9', '5'])

大于(>)或大于等于(>=)

>>> s1 > s2

True

>>> s1 > s3

False

>>> s1 >= s2

True

表示左边集合是否完全包含右边集合,如集合s1是否完全包含集合s2。  小于(

>>> s2 < s1

True

>>> s1 < s3

False

>>> s3 < s1

False

表示左边的集合是否完全包含于右边的集合,如集合s1是否完全包含于集合s2。

等于(==)、不等于(!=)

>>> s1 == s2

False

>>> s2 == s3

False

>>> s1 != s2

True

判断两个集合是否完全相同。

9、集合的成员运算符

集合里也可以使用成员运算符,in和not in,判断某个对象是否是集合中的成员。

>>> s1

set([1, 2, 3, 4, 5])

>>> 1 in s1

True

>>> 6 in s1

False

>>> 2 not in s1

False

>>> 6 not in s1

True

10、集合拷贝

集合的拷贝函数是:copy()

>>> s1

set([1, 2, 3, 4, 5])

>>> sc = s1.copy()

>>> sc

set([1, 2, 3, 4, 5])

将集合s1拷贝一份并赋给变量sc。

11、求集合长度

跟序列一样,求集合的长度也是使用len()函数。

>>> s1

set([1, 2, 3, 4, 5])

>>> len(s1)

5

12、求集合的关系

12.1 a.issuperset(b)  判断集合a是否是b的父集。

>>> s2

set([1, 2, 3, 4])

>>> s1

set([1, 2, 3, 4, 5])

>>> s1.issuperset(s2)

True

判断s1集合是否是集合s2的父集,是返回True,否则返回False。

12.2 b.issubset(a)  判断b是否是a的子集。

>>> s2

set([1, 2, 3, 4])

>>> s1

set([1, 2, 3, 4, 5])

>>> s1.issubset(s2)

False

>>> s2.issubset(s1)

True

判断s2集合是否是集合s1的子集,是返回True,否则返回False。

不可变集合frozenset

Python中还有一种不可改变的集合,那就是frozenset,不像set集合,可以增加删除集合中的元素,该集合中的内容是不可改变的,类似于字符串、元组。

>>> f = frozenset()

>>> f

frozenset([])

>>> f = frozenset('asdf')

>>> f

frozenset(['a', 's', 'd', 'f'])

>>> f = frozenset([1,2,3,4])

>>> f

frozenset([1, 2, 3, 4])

>>> f = frozenset((1,2,3,4))

>>> f

frozenset([1, 2, 3, 4])

>>> f = frozenset({1:2, 'a':2, 'c':3})

>>> f

frozenset(['a', 1, 'c'])

如果试图改变不可变集合中的元素,就会报AttributeError错误。  不可变集合,除了内容不能更改外,其他功能及操作跟可变集合set一样。  注意:  无论是可变集合还是不可变集合,参数除了支持字符、数字、还可以是汉字(要注意编码的问题),类等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值