zoukankan      html  css  js  c++  java
  • python中列表,字典等必须要注意的事项

    1.python中的列表不能够遍历删除

     1 #python列表我们不能够遍历删除
     2 li = [1, 2, 3, 4, 5, 6]
     3 for i in range(len(li)):
     4     print(i)
     5     del li[i]
     6     print(li)
     7 # 输出结果:
     8 # Traceback (most recent call last):
     9 # 0
    10 # [2, 3, 4, 5, 6]
    11 #   File "C:/Users/XZB/PycharmProjects/s1/day7/python注意事项.py", line 5, in <module>
    12 # 1
    13 #     del li[i]
    14 # [2, 4, 5, 6]
    15 # IndexError: list assignment index out of range
    16 # 2
    17 # [2, 4, 6]
    18 # 3

    原因:首先,列表是可变类型的数据,我们每进行一次修改,都会在原数据类型上面进行修改,然而for遍历有一个机制,在第一次时候,它就已经将需要遍历多少次等相关存储起来了,所以后面的遍历不会再判断需要进行多少次数,所以,在for遍历删除列表中的元素的时候,我们没遍历一次,列表中的元素都会改变,然而,for遍历的机制还是最初的那样子,所以会产生删除有误的问题!

    2.python中的字典不能够遍历删除

     1 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'}
     2 for i in dic:
     3     print(i)
     4     if 'k' in i:
     5         del dic[i]
     6 #输出结果:Traceback (most recent call last):
     7 #          k1
     8 #          File "C:/Users/XZB/PycharmProjects/s1/day7/python注意事项.py", line 20, in <module>
     9 #          for i in dic:
    10 #          RuntimeError: dictionary changed size during iteration

    如果我们将不含有k的键值对打印出来,有如下两种方法:

     1 #方法一
     2 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'}
     3 dic1 = {}
     4 for i in dic:
     5     if 'k' not in i:
     6         dic1.setdefault(i, dic[i])
     7 dic = dic1
     8 print(dic)
     9 
    10 #方法二
    11 l = []
    12 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'}
    13 for i in dic:
    14     if 'k' in i:
    15         l.append(i)
    16 
    17 for i in l:
    18     del dic[i]
    19 
    20 print(dic)
  • 相关阅读:
    paramiko使用
    requests防止中文乱码
    RESTful架构
    关于pandas
    echarts基础使用
    跨站请求伪造CSRF原理
    js将方法作为参数调用
    Newtonsoft.Json解析json字符串和写json字符串
    图片压缩
    sql去重
  • 原文地址:https://www.cnblogs.com/rcat/p/9288125.html
Copyright © 2011-2022 走看看