• python基础之集合及基础补充(循坏删除,二次编码)


    集合

    • 集合:python数据类型

      集合:(重要点)去重,集合关系

      关键字:set

      空集合:set( )

      s = {1,2,3,4}                
      print(type(s))   set
      lst = ["海绵","新力","海绵"]
      print(set(lst))    {'海绵', '新力'}    把列表转换成集合,输出结果  {'海绵', '新力'}
      

    集合中的元素要求是不可变的并且还是唯一的,我们就利用它是唯一来做去重
    集合的元素是不可变的(可哈希)

    具有有唯一特性才做到去重 # 无序,可变,可迭代

    #给这一行代码进行去重 (1)
    lst = [1,2,3,4,1,1,12,33,3,421,21,12,3]
    print(list(set(lst)))
    
    # 容器:能够存储数据的就是容器
    # list,tuple,dict,set
    

    既然是可变数据类型,就能够增删改查

    1、增(2种)

    #    s = set()
    #    s.update('alex')  # 迭代 添加#    
    #    s.add("alex")       # 添加#     
    print(s)
    

    2、删 (3种)

    # s = {"a","b",3,"c"}
    # print(s.pop())    #随机删除 pop具有返回值  pop中无法指定索引
    # s.remove("b")      #指定元素删除
    # s.clear()            #清空 后的显示是空集合    set()
    # print(s)
    

    3、改(2种)

    # 改:    
    # 1.先删后加    
    # 2.转换数据类型进行修改
    

    4、查(1种)

    # 查:
    #     for循环
    s = {"a","b",3,"c"}
    for i in s:    
    	print(i)  
    

    集合关系:

    交集,并集,差集,补集

    python = {"海","孙","力","大圣"}
    linux = {"海","大圣","meet","alex"}
    
    print(python | linux)  # 并集              | == or   
    结果:{'孙', '力', 'alex', '大圣', '海', 'meet'}
    print(python & linux)  # 交集  shift + 7   & == and
    结果:{'海', '大圣'}
    print(python - linux)  # 差集
    结果:{'孙', '力'}
    print(linux - python)
    结果:{'alex', 'meet'}
    print(python ^ linux)  # 补集 反差集 对称集   shift + 6
    结果:{'孙', '力', 'alex', 'meet'}
    
    # python = {"海绵","孙一帆","岳新力","大圣"}
    # linux = {"海绵","大圣"}
    # 超级(父集):     判断python是不是linux的超集
    # print(python > linux)  # 大于号  输出的是True  布尔值
    #子集:      判断python是不是linux的超集
    # print(linux < python)  # 小于号  输出的是True  布尔值
    

    基础数据类型补充

    **int整型 **

    a=10   #1010(二进制)
    
    print(a.bit_length())  #求最大位数
    

    str 字符串

    s = "alex wusir"
    
    s1 = s.capitalize( )       首字母大写
    
    s1 = s,title( )                 每个单子首字母大写
    
    s1 = s.index("b")          通过元素查找索引,查找不到时报错
    
    s1 = s.find("b")              通过元素查找索引,查找不到时返回 -1
    
    s1 = s.center(20)           居中
    
    s1 = s.center(20,"_")      居中,填充
    
    s1 = s.wapcase()                   大小写转换
    

    list列表

    lst = [1,2,3,4,6,5]
    print(lst[ : :-1])                    倒序 #新开辟一个内存地址
    lst.reverse()                         倒序 #原地修改
    
    lst.sort()                                #排序 默认时升序
    lst.sort(reverse = True)                降序
    

    例题: 将lst2中的元素逐个添加到lst1中

    lst1 = [1,2,3,[4]]
    lst2 = [4,5,6]
    方法一 :lst.extend(lst2)
    print(lst1)
    方法二:
    print(lst1+lst2)      #新开辟一个空间
    

    例子:

    # 列表进行乘法时元素都是共用的
    lst = [1,2,[]]lst1 = lst * 2
    lst1[-1].append(8)
    print(lst1)  # 1,2,[8],1,2,[8]
    列表和元组进行乘法时元素都是共用,故lst1 也被修改了
    

    dict 字典

    dic = {}
    dic = dic.fromkeys("abc",12)
    print(dic) #{'a': 12, 'b': 12, 'c': 12}
    批量创建键值对   参数1:键(可迭代)  参数2:值(共用)
    

    坑 当可变数据类型当作 值 时会有坑

    dic = {}
    dic = dic.fromkeys("abc",[])
    # 批量创建键值对 参数1:键(可迭代) 参数2:值(共用)
    dic["c"].append(8)
    print(dic)
    # 解决办法
    dic["c"] = [8]  单独修改c 重新开辟空间,赋值一个列表为8的
    print(dic)
    

    字典的定义:

    dic = {} dict() 都是空字典的意思

    ```print(dict(k=1,v=2,b=4)) ````结果 {'b': 4, 'v': 2, 'k': 1}``

    例题:

    print(dict([(1,2),(4,5),(7,8)]))  
    输出结果{1:2,4:5,7:8}
    
    # 类型转换:
    # False
    # print(bool(0))
    # print(bool())
    # print(bool(None))
    # print(bool(""))
    # print(bool([]))
    # print(bool(()))
    # print(bool({}))
    # print(bool(set()))
    # 只要是空的就False
    

    tuple(list)

    list(tuple) 列表和元组可相互转换

    set(list)

    list(set) 列表和集合可相互转换

    set(tuple)

    tuple(set) 集合和元组可相互转化

    int(str) # 字符串中必须全部都是阿拉伯数字

    str(int) # str(dict)# str(list)#str(tuple)`# str(int)# str(set)# str(bool)

    str可转化成任何数据类型

    基础数据类型总结

    int 有序(不支持索引) 不可变 不可迭代 取值方式
    bool 不可变 不可迭代 直接查看
    str 有序(支持索引) 不可变 可迭代 直接查看
    tuple 有序(支持索引) 不可变 可迭代 通过索引查看
    list 有序(支持索引) 可变 可迭代 通过索引查看
    dict 无序(不支持索引) 可变 可迭代 通过键查看值
    set 无序(不支持索引) 可变 可迭代 直接查看

    二、循环删除的坑

    列表循环删除的坑

    lst = [11,22,33,44,55]
    for 循环
    将列表中的元素删了
    错误示例:
    for i in lst:
    	lst.remove(i)  
    print(lst)
    分析原因: for的运⾏过程. 会有⼀个指针来记录当前循环的元素是哪⼀个, ⼀开始这个指针指向第0 个.
    然后获取到第0个元素. 紧接着删除第0个. 这个时候. 列表有补进的功能,原来是第⼀个的元素会⾃动的变成 第0个.
    然后指针向后移动⼀次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.所以不能用 for in lst: lst.pop()   或者 lst.remove(i)
    
    正确方式一
    for i in  range(len(lst)):
    ​	lst.pop(0)    
    
    正确方式二 
    lst = [11,22,33,44,55]
    lst1 = lst.copy()
    for i in lst1:
    ​	lst.remove(i)
    print(lst)
    

    把索引为奇数的删除

    lst = [11,22,33,44,55,66]
    lst1 = lst.copy()
    for i in lst1:
     	if lst1.index(i) %2 == 1:
    ​		lst.remove(i)
    print(lst)
    

    字典循环删除的坑

    删除字典中的键值对

    dic = {"key":1,"key2":2}
    dic1 = dic.copy()
    for i in dic1:
    ​	del dic[i]
    print(dic)   报错 字典在循环时不能进行删除操作
    

    如果想要循环删除,可以 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

    dic = {'k1': 'alex', 'k2': 'wusir', 'k3': '大宝哥'}
    dic_del_list = []
    # 删除key中带有'k'的元素
    for k in dic:
         if 'k' in k:
         dic_del_list.append(k)
    
    for el in dic_del_list:
         del dic[el]
    print(dic)
    
    # 使用两个字典进行删除
    dic = {'k1': 'alex', 'k2': 'wusir', 'k3': '大宝哥'}
    dic1 = dic.copy()
    for i in dic1:
        dic.pop(i)
    print(dic)
    

    二次编码:

    python3内存中使用的就是 unicode

    硬盘中存储时选择的编码方式 gbk utf-8

    s="你好"
    s1 =s.encode("utf-8")    编码  
    print(s1)
    s2 =s1.decode("utf - 8")   解码
    
    用什么编码 就要用什么解码
    
  • 相关阅读:
    C语言 · 递归求二项式系数值
    C语言 · 错误票据
    C语言 · 色盲的民主
    C语言 · 分苹果
    C语言 · Quadratic Equation
    C语言 · 企业奖金发放
    C语言 · 最长单词
    C语言 · 高精度加法
    C语言 · 判断回文
    C语言 · 简单计算器
  • 原文地址:https://www.cnblogs.com/zzsy/p/12216693.html
Copyright © 2020-2023  润新知