集合
1.定义:
集合是不重复的数据类型
#遍历数组
#!/usr/bin/env python
# -*- coding: utf-8 -*-
s = {1,2,3,4,2,2,3,1,1}
for i in s :
print i
定义同元组列表一样,集合元素的数据类型不同,不能存在列表,字典
但可以存在元组!!
s = {1,'hello','1L','1+3j',{a+1,b=2}}
for i in s :
print i
s = {1,'hello','1L','1+3j',[1,2,3]}
for i in s :
print i
s = {1,'hello','1L','1+3j',(1,2,3)}
for i in s :
print i
查看类型:
# s = set {} # 定义一个空集合
s = {1,2,4,5,2,3}
print type(s)
2.特性:
1.集合是无序的数据类型,
因此不会有索引, 切片, 重复,连接这些特性,但支持成员操作符
s = {1, 2, 4, 2, 1, 2, 5, 5, 22}
print s
s.add(80)
print s
2.集合是可迭代的对象,
因此支持for循环遍历元素;
s = {91,2,3,15,78}
print s
for i in s:
print i, ##加逗号输出不换行
执行结果:
set([91, 2, 3, 78, 15])
91 2 3 78 15 ##遍历无序
3.集合的基本操作—增加集合元素
3-1增加集合元素*.add()
其中括号内可以是元组,字符串,基本数据类型,但不能是列表和字典
# !/usr/bin/env python
# -*- coding: utf-8 -*-
s = set() # 建立一个空集合
s.add('a')
print s
s.add(2)
print s
s.add((1, 2, 3))
print s
执行结果:
set(['a'])
set(['a', 2])
set(['a', 2, (1, 2, 3)])
3-2修改集合元素*.update()
其中括号内可以是元组,字符串,列表,但不能是字典和基本数据类型
s = set()
s.update((1,2,3))
print s
s.update('hello')
print s
s.update([3,2,5])
print s
s.update(['a','b','c'])
print s
3-3删除集合元素*remove()
括号内元素及其类型载集合中要存在,否则报错KeyError:
s = {1,2,3,(5,6,7)}
s.remove(2)
print s
s.remove(8)
print s
执行结果:
set([3, 1, (5, 6, 7)]) ##第一步运行正常
Traceback (most recent call last):
File “/home/kiosk/Documents/pythoncodes/JD_exercise/1练习题/11_集合2.py”, line 36, in
s.remove(8) ##第二部运行报错
KeyError: 8
3-4*.pop()
随机 删除集合中元素,括号内不跟参数,否则报错TypeError:
s = {1,2,3,(5,6,7)}
s.pop()
print s
执行结果:
set([1, 2, (5, 6, 7)]) ##删除了元素3
3-5*.discard()
括号内跟集合元素,删除集合中指定元素,不加元素报错TypeError,所跟元素集合中不存在,则不操作,不报错
s = {1,2,3,(5,6,7)}
s.discard(2)
print s
s.discard((5,6,7))
print s
s.discard(8)
print s
s.discard()
print s
执行结果:
set([3, 1, (5, 6, 7)])
set([3, 1])
set([3, 1]) ##前三步没问题
Traceback (most recent call last):
File "/home/kiosk/Documents/pythoncodes/JD_exercise/1练习题/11_集合2.py", line 51, in <module>
s.discard()
TypeError: discard() takes exactly one argument (0 given)
3-6*.copy()
括号不跟参数,用于集合的复制
s1 = {1,2,3}
s2=s1.copy()
print s2
4.集合的交并补差
方法一:
& 求两集合交集
| 求两集合补集
- 求两集合差题 其中-号取前集合元素
^ 对等差分
案例:
s1 = {1,2,3}
s2 = {2,3,4}
print s1 & s2
print s1 | s2
print s1 - s2 # 其中-号取前集合元素
print s1 ^ s2 # 差集
执行结果
set([1, 3])
set([1, 2, 3, 4])
set([2])
set([2, 4])
方法二:
s1.issubset(s2) ##判断s1是否是s2的子集,返回值布尔型
s1.issuperset(s2) ##判断s1是否是s2的真子集,返回值布尔型
s1.difference(s2) ##求s1和s2的集合的不同
s1.intersection ##求s1和s2的交集
s1.union ##求s1和s2的并集
s1.isdisjoint ##自己看说明
案例:
s1 = {1,2,3}
s2 = {2,3,4}
print s1.intersection(s2)
print s1.union(s2)
print s1.difference(s2)