列表和字典循环遍历时的删除问题,集合

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))

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

 

posted @ 2018-06-07 21:10  冯坤大神  阅读(232)  评论(0编辑  收藏  举报