zoukankan      html  css  js  c++  java
  • python中的set集合和深浅拷贝

    一.基础数据类型的补充

    1.str中的join算法,将列表转换成字符串,并用'_'(或其他)

    1 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
    2 s='_'.join(li)
    3 print(s)        #李嘉诚_马化腾_刘嘉玲_黄海峰

    2.循环删除列表中的每个元素

    li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
    for el in li:
        li.remove(el)
    print(li)       #['马化腾', '黄海峰']

    原因分析:for循环在运行过程中会有一个指针记录当前循环的元素是哪一个.

     方法一:

    1 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
    2 for i in range(0,len(li)):
    3     li.pop()    #括号中什么也不写,默认删除最后一个
    4 print(li)       #[]

     方法二:删除元素会导致列表中元素的索引发生改变,所以容易出现问题.

    1 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
    2 del_li=[]
    3 for el in li:
    4     del_li.append(el)    #用另一个列表来记录我要删除的内容
    5 for el in del_li:      #循环另一个列表
    6     li.remove(el)       #把原列表中的每一个元素对应删除
    7 print(li)         #[]

    字典也是如此:

    1 dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
    2 lis=[]
    3 for el in dic:
    4     lis.append(el)
    5 for el in lis:
    6     dic.pop(el)
    7 print(dic)    #{}

    3.dict中的元素在迭代的过程中是不允许进行删除的,要想删除,就要把想删除的元素暂时保存在一个list中,在循环list删除.

    1 dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
    2 lis=[]
    3 for el in dic:
    4     if el.startswith(''):
    5         lis.append(el)
    6 for el in lis:
    7     dic.pop(el)
    8 print(dic)        #{'发姐': '陈一发儿', '55开': '卢本伟'}

    4.dict中的dict.fromkeys(),可以帮助我们通过list创建一个dict

    1 a','b'],['c','d'])
    2 print(dic)      #{'a': ['c', 'd'], 'b': ['c', 'd']}  前面的迭代被作为字典的键,后面的被作为字典的value

    5.字符串和列表的相互转换

    把字符串转换成列表:split()

    把列表转换成字符串:join()

    二.set集合

    特点:set中的元素是无序的,不重复的,里面的元素必须是可hash的(int,str,tuple,bool),set就是字典类型的数据,但是不保存value.set用{}表示.

    注意:set集合中的元素必须是可hash的,但是set本身是不可hash的.

    不可重复,无序(一般用来去重):

    1 s={'1','2','2'}
    2 print(s)      #第一次运行{'1', '2'}   第二次运行{'2', '1'}

    1.增

    (1) s.add():

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 s.add('美丽的我')
    3 s.add('王祖贤')        #重复的内容不会添加到set中
    4 print(s)               #{'刘嘉玲', '美丽的我', '王祖贤', '张曼玉'}

    (2) s.update():

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 s.update('马化腾')      #迭代添加
    3 print(s)                 #{'化', '刘嘉玲', '张曼玉', '腾', '王祖贤', '马'}

    2.删

    (1)  s.pop()

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 # a=s.pop()      #随机删除一个
    3 # print(a)
    4 # print(s)

    (2) s.remove()

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 # s.remove('刘嘉玲')      #直接删除指定元素,如果不存在会报错
    3 # print(s)

    (3) s.clear()

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 s.clear()
    3 print(s)     #set()

    3.改

    set中的数据没有索引,所以没有办法定位一个元素,因此没有办法进行直接修改.

    我们可以采用先删除后添加的方式进行修改

     

    #把刘嘉玲改成赵本山
    s={'刘嘉玲','张曼玉','王祖贤'}
    s.remove('刘嘉玲')     #删除
    s.add('赵本山')       #添加
    print(s)              #{'赵本山', '张曼玉', '王祖贤'}

     

    4.查

    用for循环进行查看

     

    1 s={'刘嘉玲','张曼玉','王祖贤'}
    2 for el in s:      #王祖贤
    3     print(el)     #刘嘉玲
    4                   #张曼玉

     

    5.常用操作

     

     1 s1={'刘能','赵四','皮长山'}
     2 s2={'刘科长','冯科长','皮长山'}
     3 print(s1 & s2)              #交集
     4 print(s1.intersection(s2))  #交集
     5 
     6 print(s1 | s2)              #并集
     7 print(s1.union(s2))         #并集
     8 
     9 print(s1 - s2)              #差集
    10 print(s1.difference(s2))    #差集
    11 
    12 print(s1 ^ s2)               #反差集
    13 print(s1.symmetric_difference(s2))    #反差集
    14 
    15 print(s1 < s2)               #子集
    16 print(s1.issubset(s2))       #子集
    17 
    18 print(s1 > s2)               #超集
    19 print(s1.issuperset(s2))     #超集

     

    三.深浅拷贝

    1. 赋值. 没有创建新对象. 公用同一个对象
    2. 浅拷贝. 拷贝第一层内容. [:]或copy()
    1 lst1=['何炅','杜海涛','谢娜',['李维嘉']]
    2 lst2=lst1.copy()
      print(lst1)           #2571062967176
    print(lst2) #2571062967176
    3 print(id(lst1[3])) #2449591204744 4 print(id(lst2[3])) #2449591204744
    3. 深拷贝. 拷贝所有内容. 包括内部的所有.
    1 import copy
    2 lst1=['何炅','杜海涛','谢娜',['李维嘉']]
    3 lst2=copy.deepcopy(lst1)
    4 print(lst1)
    5 print(lst2)
    6 print(id(lst1),id(lst2))   #3135828524616 3135828628360
    
    

     

     

     

  • 相关阅读:
    js公共时间戳方法es6
    vue权限路由
    vue中websocket心跳写法
    vue引入全局组件和局部组件的区别以及全局注册公共函数
    [干货]关于vue作用域插槽的新的深入理解
    vue系统指令v-text(前端网备份)
    浏览器兼容html头部<meta>标签主要内容详情
    如何设置td中溢出内容的隐藏显示
    7-4列表/元组/字典/集合的内置方法
    7-3 整型/浮点型/字符串/列表常用方法
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/9414538.html
Copyright © 2011-2022 走看看