十八、列表和字典的坑(循环不能删减其中的元素)

一、列表的坑

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


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

 

posted on 2019-05-13 23:47  雨后清明  阅读(607)  评论(0编辑  收藏  举报

导航