Python-集合,,‘‘‘#集合:天生去


‘‘‘
#集合:天生去重
1、去重
2、关系测试:交集、差集、并集、反向差集、对称差集
3、集合无序,能循环但不能根据下标取值

一、去重:
(1)
nums=[1,1,2,3,3,4]
set(nums) #list转换为集合
#{1, 2, 3, 4}
(2)
nums2={1,1,2,2,3,3}
print(set(nums2))
#{1, 2, 3}

d = {} #空字典
jihe=set() #空集合

‘‘‘


#监控日志
#1、如果1min某个ip访问超过100次
#2、找出IP

‘‘‘
1、日志读行
2、split, 取第一个元素
3、找出所有IP统计次数
4、判断次数,发邮件
5、记录文件指针
6、等待60s,重新读取文件
‘‘‘
import time
point = 0

while True :
with open(‘access.log‘,encoding=‘utf-8‘) as f:
ip_info = {}
f.seek(point)
for line in f :
ip = line.split()[0]
print(ip)
if ip in ip_info :
ip_info[ip] +=1
else :
ip_info[ip] = 1
point = f.tell()
print(ip_info)
for k in ip_info :
if ip_info[k] > 100 :
print(‘该IP:%s在攻击你‘ %k)

time.sleep(60)




集合的关系测试
#二、关系测试
list1 = {1,2,3,4,5}
list2 = {2,3,4,6,7}

# list1.intersection(list2) #交集:取出重复数据
# list1&list2
# list1.union(list2)) #并集(单向):1去除在2中重复的
# list1|list2
# list1.difference(list2) #差集:取1中有 2中没有
# list1-list2
#
# list,issubclass(list2)
# list2.issubset(list1)) #子集 2是1的子集 ,返回布尔值
# list1.issuperset(list2) #父集 1是2的父集

import string
all_nums=set(string.digits)

print(list1.symmetric_difference(list2)) #对称差集及反向差集:互相没有交集的元素,1里在2中没有的+2里在1中没有的



#集合操作
list1.add(123) #add每次只能添加一个
list1.update([33,44]) #同时添加多个
list1.remove(123) #只能删除1个元素,删除不存在的报错
list1.pop() #随机删除
list1.discard(888) #只能删除1个元素,删除不存在的不报错

print(list1)


练习:
#s输入密码,包含大写、小写、数字、特殊字符


pwd = input(‘输入密码‘)
list1 = set(pwd)
print(list1)

import string
all_nums=set(string.digits)
all_upletter=set(string.ascii_uppercase)
all_lowletter=set(string.ascii_lowercase)
all_pun=set(string.punctuation)


if all_nums.intersection(list1) and all_upletter.intersection(list1) and all_lowletter.intersection(list1) and all_pun.intersection(list1) :
print(‘输入合法‘)
else :
print(‘输入不合法‘)

Python-集合

评论关闭