zoukankan      html  css  js  c++  java
  • 列表和字典循环遍历时的删除问题,集合

    1.for 循环的问题 : for 循环后面也有else,也可以使用break和continue(使用方法跟while一样).

        while    条件:                   for  变量 in 迭代器:         

                 循环体                             代码块

        else:                                else:

                代码块                              代码块

    2 .str 操作

      s = ["a","b","c","d"]            join()是把列表变字符串,用前面的字符串把列表连接起来,返回新的字符串.

      a = "_".join(s)

      print(a)      得到的结果是"a_b_c_d"

       s = "金毛狮王"     

       a = "_".join(s)           join()迭代,把每一项进行拼接.

       print(a)    得到的结果是"金_毛_狮_王"

       补充:  join()把列表变成字符串.

                  split()把字符串切割转换成列表.

     添加一个知识点:  if (b.startswith("A") or b.startswith("a")) and b.endswith("c") :                         if("小粉嫩" or "大铁锤") in a:    这两个条件判断看着很像,感觉理论上逻辑是一样的,其实不然,因为("小粉嫩" or "大铁锤")这个逻辑运算出来的结果必然是  "小粉嫩"    所以小面的条件就会变成 :if   "小粉嫩"  in  a:    而第一个条件判断里面的  b.startswith("A") 是判断是不是以  "A"  开头,如果是,条件就会变成  if  b.startswith("A")  and  b.endswith("c") :     如果否,条件就会变成  if  b.startwith("a")  and   b.endswith("c") :   所以这两个条件是不一样的.

    3. list 的删除问题

    例:删除列表lst = [1,2,4,5,7]里面的元素.

        for  i in lst:              这是一个错误的示范:

           lst.remove(i)

        print(lst)

     lst列表里的元素删不干净,原因是因为由于删除元素会导致元素的索引改变,所以容易出现问题,尽量不要直接删除,简易方法有两种.

    第一种:是建立一个新列表                  第二种方法:

              lst = [1,2,4,5,7]                                       lst = [1,2,4,5,7] 

             lst1 = []                                                    for  i  in  range(len(lst)):

              for  i in lst:                                                      lst.pop()

                  lst1.append(i)                                       print(lst)

              for  a in lst1:

                  lst.remove(a)

              print(lst)

        

      字典的知识补充: dict中的fromkey()可以帮我们通过list来创建一个list.

       例:  dic = dict.fromkeys(["jay","JJ"],"周杰伦")

               print(dic)

             得到的结果是{"Jay":"周杰伦","JJ":"周杰伦"}

      这个就是把第一个参数中的每一项拿出来和第二个参数组成一个键值对.生成出来的键指向的value是同一个对象,改变其中一个的时候,另一个也会跟着改变.

        dict中的元素在迭代过程中是不允许删的.

        dic的删除: dic = {1:2,2:3,3:4}

                          lst = [2]                把要删除的键放在列表中,循环列表,删除字典.

                          for i in lst:

                             dic.pop(i)

                           print(dic)

         类型的转换:   元组 => 列表           list(tuple)

                               列表 => 元组           tuple(list)

                               list  =>  str               join()

                               str   =>  list              split()

                  

      转换成False的数据有哪些:  0 ,"" ,[]  ,{}  ,None , set().

    4 .set集合.  不重复,无序,里面的元素不可变(可哈希).set本身是不可哈希的,set是可变的.

        set里面的元素跟字典里的key 是一样的, key是不会重复,无序.

         set集合用{} 大括号表示.  s = {} 错误, s = set()  或者  s = set({})

      set 最大的功能是:去重复.

           集合(set) => list              list(set)

           list  =>  集合(set)            set(list)

      set 集合的增删改查:

           增:  add ,  update                 s = set()                        s = set()                      update是一个一个加

                                                       s.add("wo")                    s.update(["zh","ni"])    进去.

                                                       print(s)                            print(s)

       删除   

              s.pop(  )  弹一个出来     有返回值.

              print(s)     随机删除

             remove()   直接删,如果删除的元素不存在,会报错.

            空集合显示set()  跟空字典不一样.

            clear  清空

       修改. set集合中数据没有索引,没有办法直接删除,先删除再添加.

      

    s1 = {1,2,3,5,6,7}

    s2 = {3,4,5,6}

     求交集: print(s1&s2)   或者   print(s1.intersection(s2))

      求并集: print(s1|s2)   或者   print(s1.union(s2))

      求差集: 把自己本身中和对方不相关的内容留下.

                   print(s1-s2)   或者  print(s1.difference(s2))

      set集合本身是可以改变的,不可哈希的.我们也可以保存数据,用frozenset.

        s = frozenset({1,4,3})

        print(s)                               frozen是可哈希的数据类型.

        for  el  in s:

             print(el)

      5. 深浅拷贝 ,拷贝是复制一份.

          lst1 = [1,2,3,5,6,3]

          lst2 = lst1

         print(id(lst1),id(lst2))      内存地址是一样的

       lst1 = [1,2,3,5,6,3]

        lst2 = lst1.copy()  拷贝复制克隆

        print(id(lst1),id(lst2))

       拷贝复制出来的东西与原来的内存地址不一样,  lst2 = lst1[:]  也是拷贝,复制.

       lis1 = [1,2,3,5,[3,4,5],3]

       lst = lis1[:]  拿到的是第一层的复制品.

       print(id(lis1(4),id(lst(4))          lst = lis1.copy() 也是拿到第一层的复制品.

       拷贝是复制一份, 浅拷贝只会拷贝第一层内容,第二层内容不会拷贝.

        深拷贝,   导入copy 模块

        例:  import  copy

               lst = [1,2,3,[3,4,5]]

               lst2 = copy.deepcopy(lst)      深度拷贝

               print(id(lst(3)),id(lst2(3))

        深拷贝是把所有的内容都拷贝过来,都会复制一份.

  • 相关阅读:
    电子辅助的个体化严密控制策略比常规方法更有效地帮助早期RA实现全面控制病情[EULAR2015_THU0122]
    超声和免疫学指标的特征能否反映RA临床缓解的表型?[EULAR2015_THU0121]
    依那西普减量维持过程中RA病人自报病情复发可能预示未来放射学进展[EULAR2015_SAT0147]
    RETRO研究: 持续缓解的RA患者的减量维持方案[EULAR2015_SAT0056]
    OPTIRRA研究: TNF拮抗剂维持期优化减量方案[EULAR2015_SAT0150]
    与时俱进的治疗策略不断提高RA无药缓解机会[EULAR2015_SAT0058]
    雷公藤多甙治疗类风湿关节炎遭质疑
    我的博客今天2岁203天了,我领取了先锋博主徽章
    MyEclipse中最常用的快捷键大全
    MyEclipse无法打开jsp文件(打开是空白的),但是可以打开java文件
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9152810.html
Copyright © 2011-2022 走看看