python-集合

一、集合:set

特点:

天生去重;集合也是无序的

不可根据下标取值,可用for循环取出集合中的元素,如以下代码

1 nums  = {6,7,1,2,3,4,5,6,7}# 集合可自动去重
2 for n in nums: # 使用for循环读取集合中的数据
3     print(n)

 1、集合的定义

(1)定义一个空集合,如下所示

*注:创建空集合时,只能用set(),如果用第二种方法s={},创建的实际上是一个空字典。
1 num_set = set()
2 print(num_set) #运行结果:set()
3 print(type(num_set))  #第一种方法,也是正确的创建集合方法,运行结果:<class 'set'>
4 s = {}
5 print(s)# 运行结果:{}
6 print(type(s)) # 第二种方法,错误的方法,实际创建的是一个字典,运行结果:<class 'dict'>

(2)将list定义为集合,set[list],如下所示

 1 nums = [1,2,3,4,2,4,5] # 定义一个list

2 print(set(nums))# 运行结果:{1, 2, 3, 4, 5} 

 二、集合的关系测试-交集&、并集|、差集-、(反向差集、对称差集^)

1 # 首先定义两个集合

2 num = {1,2,5,6,8,9,0}

3 num2 = {1,4,7,8,9,12,15} 

1、交集&

取出两个集合中重复的数据,有两种方式,$比较好记,另一种了解即可

1 print(num.intersection(num2) )# 运行结果:{8, 1, 9}

2 print(num & num2)# 运行结果:{8, 1, 9} 

附:对称差集^

将两个集合中重复的数据都去掉后,取剩余的数据(或称对称差集)

1 print(num.symmetric_difference(num2)) # 运行结果:{0, 2, 4, 5, 6, 7, 12, 15}
2 print(num ^ num2)# 运行结果:{0, 2, 4, 5, 6, 7, 12, 15}

2、并集|

将两个集合合并,同样是两种方式,|容易记得,另一种仅需了解

1 print(num.union(num2))# 运行结果:{0, 1, 2, 4, 5, 6, 7, 8, 9, 12, 15}
2 print(num | num2)# 运行结果:{0, 1, 2, 4, 5, 6, 7, 8, 9, 12, 15}

3、差集-

把num集合中存在,num2中不存在的数据取出来,-比较好记,另一种了解即可

1 print( num - num2 )# 运行结果:{0, 2, 5, 6}

2 print(num.difference(num2))# 运行结果:{0, 2, 5, 6} 

 三、集合操作

 1 num.add(777) #一次添加一个
 2 print(num)# 运行结果:{0, 1, 2, 5, 6, 8, 9, 777}
 3 num.update([888,999])#同时添加多个
 4 print(num)# 运行结果:{0, 1, 2, 5, 6, 999, 8, 9, 777, 888}
 5 num.remove(999)# 删除指定数据
 6 print(num)# 运行结果:{0, 1, 2, 5, 6, 8, 9, 777, 888}
 7 num.pop()# 随机删除一个数据(先将集合排序后,删除最小的一个)
 8 print(num)# 运行结果:{1, 2, 5, 6, 8, 9, 777, 888}
 9 num.discard(888) # 删除一个不存在的 不会报错
10 print(num)# 运行结果:{1, 2, 5, 6, 8, 9, 777}

四、练习

1、

 1 import string
 2 all_nums = set(string.digits)
 3 print(all_nums)# {'7', '1', '6', '3', '5', '4', '9', '0', '8', '2'}
 4 num4 = {'1','2','3'}
 5 print(all_nums.issuperset(num4))# True  all_nums:父  num4:子  .issuperset()父找子
 6 print(num4.issubset(all_nums))# True  all_nums:父  num4:子  .issubset()子找父
 7 # 可使用以下几种测试该方法
 8 # {1,2,3}
 9 # {a-z}
10 # {A-Z}
11 # {~=}

2、验证密码是否合法,密码需包含大写字母、小写字母、数字、特殊字符

 1 import string
 2 all_nums = set(string.digits)
 3 lower = set(string.ascii_lowercase)
 4 upper = set(string.ascii_uppercase)
 5 punctuation = set(string.punctuation)
 6 for i in range(5):
 7     pwd = input('请输入你的密码:').strip()
 8     pwd = set(pwd)
 9     if pwd & all_nums and pwd & lower and pwd & upper and pwd & punctuation:
10         print('密码校验合法')
11     else:
12         print('密码不合法,必须包含大写字母、小写字母、数字、特殊字符!')

 3、使用交集判断密码是否合法

import string

password = 'abc123A'

password_set = set(password)

if password_set & set(string.digits) and password_set & set(string.ascii_lowercase) \
    and password_set & set(string.ascii_uppercase):
    print('密码合法')
else:
    print('不合法')

 

posted @ 2018-06-12 21:53  灿烂初秋  阅读(201)  评论(0编辑  收藏  举报