zoukankan      html  css  js  c++  java
  • 十八、列表和字典的坑(循环不能删减其中的元素)

    一、列表的坑

    • (***)循环一个列表的时候,最好不要改变原列表的大小,这样会影响你的最终结果


    #l1 = [11, 22, 33, 44, 55]
    # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。

    #正常思路:先将所有的索引整出来,加以判断,index % 2 == 1: pop(index)
    l1 = [11, 22, 33, 44, 55]
    for index in range(len(l1)):
       if index % 2 == 1:
           l1.pop(index)
    print(l1)
    #得到的结果却为[11, 33, 44],这不是正确的结果,是因为在删除22的时候,改变了列表后边的元素的索引,整体向前移动一位,导致这样的结果

    # 最简单的方法:
    l1 = [11, 22, 33, 44, 55]
    del l1[1::2]
    print(l1)

    # 倒序法删除元素:
    l1 = [11, 22, 33, 44, 55]
    for index in range(len(l1)-1,-1,-1):
       if index % 2 == 1:
           l1.pop(index)
    print(l1)

    # 思维置换
    l1 = [11, 22, 33, 44, 55]
    l2 = []
    for index in range(len(l1)):
       if index % 2 == 0:
           l2.append(l1[index])
    l1 = l2
    print(l1)

    #所以: 循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。

    二、字典的坑

    • (***)循环一个字典的时候,如果改变这个字典的大小,就会报错


    #dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
    # 将字典中键含有'k'元素的键值对删除。

    #正常思路:先找出字典中所有的键,如果键中有k,则将含有'k'元素的键值对删除。
    dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
    for key in dic:
       if 'k' in key:
           dic.pop(key)
    print(dic)
    #此时,字典会直接报错,是RuntimeError: dictionary changed size during iteration,即为字典在循环迭代时,改变了大小。

    #建立空列表,把字典中带k的键找出来放在列表里,遍历循环列表,只要出现在列表中的,字典中删除键对应的值
    dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
    l1 = []
    for key in dic:
       if 'k' in key:
           l1.append(key)
    print(l1)            #['k1', 'k2', 'k3']
    for i in l1:
       dic.pop(i)
    print(dic)           #{'age': 18}

    #直接在取字典中的键时,直接list(dic.keys()),省一个for循环
    dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
    for key in list(dic.keys()):  # ['k1', 'k2', 'k3','age']
       if 'k' in key:
           dic.pop(key)
    print(dic)
  • 相关阅读:
    Mybatis核心
    正则表达式(二)Java中正则表达式的使用
    Elasticsearch(ES)分词器的那些事儿
    并发编程之:JUC并发控制工具
    scrollTo()和scrollBy()的区别
    SpringBoot 的@Value注解太强大了,用了都说爽!
    SQL 查询并不是从 SELECT 开始的
    jsoup 教程
    爬虫
    case when以及集合聚合函数的用法
  • 原文地址:https://www.cnblogs.com/yangzm/p/10859805.html
Copyright © 2011-2022 走看看