zoukankan      html  css  js  c++  java
  • set集合以及知识点补充

    str知识点补充:

    #join() 将列表中的每个元素中间加上一个字符,连接成一个字符串
    list = ['a','b','c','d']
    str = '*'.join(list)
    print(str)  # a*b*c*d
    
    # 将列表 -> 字符串 用join()   将字符串 -> 列表,用split() 切割

    关于列表或字典循环删除的问题:

    列表:

    #循环删除列表中的元素,以达到清空列表的结果
    #错误写法
    lis = [1,2,3,4]
    """
    for i in lis:
        print(lis.index(i)) # 0 1 
        lis.remove(i) # [2,4]
    print(lis)
    #删除不干净的原因:每次删除一个元素,后面的元素总会向前进一个位置,到最后会找不到一部分索引
    """
    #way 1 :(可以达到目的,但不是很好)
    for i in range(0,len(lis)):
        lis.remove(lis[0]) #每次只删除最开始的元素
    print(lis)
    
    #删除列表完美写法
    new_lis = []
    #先将要删除的东西放入到新列表中
    for i in lis:
        new_lis.append(i)
    #利用新列表作为目标,去删除老列表中的东西
    for el in new_lis:
        lis.remove(el)
    View Code

      原因:for 的运行过程中,会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个,然后获取到第0个元素,紧接着删除第0个,这个时候,原来是第一个的元素就会自动编程第0个,然后指针向后移动一次,指向1元素,这时原来的1已经变成了0,也就不会被删除了。

    字典:

    #关于将字典清空
    dic = {'a':1,'b':2,'c':3}
    #错误写法
    # for i in dic: #这儿直接写dic 相当于dic.key()
    #     dic.pop(i)  # dictionary changed size during iteration 在遍历字典的时候不允许修改
    
    #正确的写法
    #先将你要删除的key存储到List中
    li = []
    for i in dic:
        li.append(i)
    #再根据li中的元素,删除字典中的键值对
    for i in li:
        dic.pop(i) 
    print(dic) # {}
    View Code

    由于删除元素会导致元素的索引改变,所以容易出现问题,尽量不要在循环中直接去删除元素,可以把要删除的元素添加到另一个集合中然后再批量删除。

    #dict的fromkey() 通过list 创建一个dict
    #将前一项的元素迭代与第二项的元素形成键值对
    #前面的每一项都会作为key,后面的列表中的内容作为value,形成字典
    dic = {}
    # dic.fromkeys(['123','234'],"你好")
    # print(dic) #{} 没有接收返回值
    dic = dic.fromkeys(['123','234'],["你好"]) #返回字典类型,需要赋值给dic
    print(dic) # {'123': ['你好'], '234': ['你好']}
    
    #两个key指向的是同一个value 一个变则都变
    dic['123'].append('世界')
    print(dic['234']) # ['你好', '世界']
    View Code

    类型转换:

    • 元组 -> 列表  list(tuple)
    • 列表 -> 元组  tuple(list)
    • list -> str  str.join(list)
    • str -> list  str.split()

    转换成False的数据:

      0,‘’,None,[],{},set(),(), False

    set集合

    set集合是python中的一个基本数据类型,一般不是很常用,set中的元素是不重复的,无序的,里面的元素必须是可哈希的,即不可变的(int,str,tuple,bool)

    set就是dict类型的数据,但是不保存value,只保存key,用{}表示

    #set 本身不可哈希(可以修改) 但是其中元素是可哈希的  元素不可重复  元素无序  存储的相当于字典中的key
    
    #创建一个set
    se_1 = set({1,2,3,[1,2]}) # wrong: unhashable type: 'list'
    print(se_1)
    se_1 = {1,2,3}
    se_2 = set({3,4,5})
    print(se_1,se_2)
    
    #因为set不可以重复,所以它可以给list去重
    lis = ['周杰伦','周星驰','周润发','周星驰']
    se_3 = set(lis) #将list转换为set
    lis = list(se_3) #将set转换为list
    print(lis) # ['周杰伦', '周星驰', '周润发']
    
    #set的操作:
    # ---------- 增 ------------- add update
    se = set({}) # 如果单写{},会被认为是字典
    for i in range(0,5):
        se.add(i) #
    print(se) # {0, 1, 2, 3, 4}
    se.add(4) #重复的数据无用
    print(se)
    
    se.update(['q','w','e'])  #迭代着更新
    print(se)# {0, 1, 2, 3, 4, 'w', 'q', 'e'}
    
    # ---------- 删 -------------
    ret = se.pop() #随便删除一个元素  返回删除的那个元素
    se.remove(1) #删除指定元素
    se.clear() #清空 结果是set() 因为要和字典区别
    
    # ---------- 改 -------------
    # 因为set是无序的,所以不能通过索引删除元素
    #先删除再添加
    se.remove(1)
    se.add('添加的元素')
    
    # ---------- 查 -------------
    #set可迭代 可以用for循环进行遍历
    for i in se:
        print(i)
    
    se_1 = {1,2,3,4}
    se_2 = {4,5,6,7}
    
    # ---------- 其他操作 -------------
    #交集
    print(se_1 & se_2) #{4}
    print(se_1.intersection(se_2))
    
    #并集
    print(se_1|se_2) # {1, 2, 3, 4, 5, 6, 7}
    print(se_1.union(se_2))
    
    #差集
    print(se_1 - se_2) #{1,2,3}
    print(se_1.difference(se_2))
    
    #反交集
    print(se_1 ^ se_2) # {1, 2, 3, 5, 6, 7}
    print(se_1.symmetric_difference(se_2))
    
    #子集
    # print(se_1 < se_2) # False
    # print(se_1.issubset(se_2))
    
    #超集
    print(se_1 > se_2)
    print(se_1.issuperset()) #False
    
    #set集合本身是可以发生改变的,是不可哈希的,我们可以使用frozenset来保存数据。
    # frozenset是不可变的,可就是一个可哈希的数据类型
    s = frozenset(['q','w','e'])
    dic = {s:'123'} #可以正常使用了
    print(dic) 
    View Code
  • 相关阅读:
    bash中常见环境变量env、set、export 、declare与bash漏洞原理
    Java-获取时间方法比较
    Java-数据类型转换大全
    Java-后端图片处理(图片拼接)
    Java-AOP切面
    Java-异常状态码
    Spring Data JPA-日常使用
    Http-请求头各种参数设置
    Java-java命令运行jar编译问题
    SpringBoot-文件上传
  • 原文地址:https://www.cnblogs.com/liangying666/p/9150891.html
Copyright © 2011-2022 走看看