• python自动化测试-D4-学习笔记之二(集合)


    集合:天生去重,无序的,也是一种数据类型,特点:没有重复的数据

    1、集合的定义:

          定义空集合:s1 = set()

          有元素的集合的定义: 

          s2 = {'1','2','3','3','3','3'} # 有冒号的是字典,没有冒号的是集合,都是用{}来定义
      list = [2,3,1,2,3,4]
    s_list = set(list)#这样就定义了一个集合
    set1 = set([1,3,4,5,6])#这种方式和上面的都是把list转换成一个集合
    set2={'hehe','hehe1','hehe3'}#这种方式是直接定义一个集合

     2、集合的取值:

          因为集合是无序的,所以取值的话,要转成list进行取值

      ls = [1,2,3,4,5,5,5,5,5,5] #如果对list去重,直接set既可
    print(set(ls)) #打印结果是:{1, 2, 3, 4, 5}

    3、集合的增删改查:

    # 集合增加
    s2.add('5')
    s3 = {'1','2','5','7','9','0'}
    #集合删除
    s2.pop() #随机删除一个
    s3.remove('0')#删除指定的值

    4、交集、并集、差集

    #交集
    print(s2.intersection(s3))
    print(s2 & s3)

    # 并集
    print(s3.union(s2))
    print(s2|s3)

    # 差集:
    print(s3.difference(s2))
    print(s2.difference(s3)) #在s2中存在的,s3中不存在的
    print(s2-s3)
    print(list3.issubset(list1))#判断list3是不是list1的子集
    print(list1.issuperset(list3))#判断list1是不是list3的父集
    print(list1.isdisjoint(list3))#判断list1和list3是否有交集
    print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
    print(list1 ^ list2)
    list1.add(888)#添加元素
    list1.update([777,666,666])
    list1.remove(777)#删除元素,如果元素不存在会报错
    list1.pop()#删除一个随机的元素,并返回删除的元素
    list1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理
            list1 {1234569}
            list2 {23461}
            list3 {123}
            print(list1.intersection(list2))  # 取交集,也就是取list1和list2中都有的
            print(list1 list2)# 取交集
            print(list1.union(list2))  # 取并集,也就是把list1和list2合并了,然后去除重复的
            print(list1 list2)# 取并集
            print(list1.difference(list2))  #取差集 在list中存在,在list2中没有的
            print(list1 list2)
            print(list3.issubset(list1))#判断list3是不是list1的子集
            print(list1.issuperset(list3))#判断list1是不是list3的父集
            print(list1.isdisjoint(list3))#判断list1和list3是否有交集
            print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
            print(list1 list2)
            list1.add(888)#添加元素
            list1.update([777,666,666])
            list1.remove(777)#删除元素,如果元素不存在会报错
            list1.pop()#删除一个随机的元素,并返回删除的元素
            list1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理
    
    
    # 如果同一个ip地址60s之内访问超过200次,那么就把这个ip地址加入黑名单
    # 需求分析
    # 1、60s读一次文件
    # 2、分割,取到第一个元素,ip地址
    # 3、把所有的ip都放在一个list里面,如果ip超过200次,加入黑名单
    # 4、因为日志文件是追加的,所以循环的话会把之前查到的ip在查出来,循环完会指针在末尾,所以需要记住指针位置,point = f.tell()
    # import time
    # point = 0
    # while True:
    # ips = []
    # with open('access.log','a+',encoding='utf-8') as f:
    # f.seek(0)
    # for line in f:
    # ip = line.split()[0]#split 默认是空格分割
    # ips.append(ip)
    # if ips.count(ip)>199:
    # print('%s已经加入黑名单!'%ip)
    # point =f.tell()
    # time.sleep(60)
    #用集合来去重
    import time
    point = 0
    while True:
    ips = [] #存放所有的IP地址的list
    blk_set = set()#存放需要加入黑名单的ip
    with open('access.log','a+',encoding='utf-8') as f:
    f.seek(0)
    for line in f:
    ip = line.split()[0]#split 默认是空格分割
    ips.append(ip)
    if ips.count(ip)>199:
    blk_set.add(ip)
    for ip in blk_set:# 这个for循环的目的是,防止ip重复加入黑名单,因为集合是去重的。
    print('%s已经加入黑名单!' % ip)
    point =f.tell()
    time.sleep(60)



    #判断 类型

    def print_var_type(var):
    if type(var) ==str:
    print('字符串')
    if type(var) ==dict:
    print('字典')
    if type(var) ==int:
    print('整数')
    if type(var) ==float:
    print('浮点型')
    if type(var) ==list:
    print('数组')
    if type(var) ==tuple:
    print('元组')
    if type(var) == set:
    print('集合')
    print_var_type(99)
  • 相关阅读:
    我的操作系统复习——进程(下)
    我的操作系统复习——进程(上)
    我的操作系统复习——操作系统概述
    GO语言总结(5)——类型转换和类型断言
    GO语言总结(4)——映射(Map)
    GO语言总结(3)——数组和切片
    GO语言总结(2)——基本类型
    msl字符串截取与拆分
    ES中模糊查询的实现
    mysql纯数字的字符串排序
  • 原文地址:https://www.cnblogs.com/blackbird0423/p/8275664.html
Copyright © 2020-2023  润新知