沟壑

                                 强大自己是唯一获得幸福的途径,这是长远的,而非当下的玩乐!


  • 使用for循环,循环列表或字典过程中,改变其大小。

# 列表
>>> l1 = [11, 22, 33, 44, 55, 66]
>>> del l1[1::2]                 # 使用del可以正常的删除
>>> print(l1)
[11, 33, 55]
>>> for i in range(len(l1)):     # 如果用for,则结果与预想不一样
...     if i % 2 == 1:
...             del l1[i]
...
>>> print(l1)
[11, 55]
>>>


# 字典
>>> dic1 = {"name": "zuowei", "age": 18, "hobby": "lp"}
>>> for i in dic1:
...     if "name" in dic1:
...             del dic1[i]
...                                    # 如果在循环过程中改变了大小,会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

解决:

# 列表
# 列表可以使用del一次性删除
# 如若使用for应倒叙删除
>>> l1 = [11, 22, 33, 44, 55, 66]
>>> for i in range(len(l1)-1, -1, -1):
...     if i % 2 == 1:
...             del l1[i]
...
>>> print(l1)
[11, 33, 55]

# 字典
# 由于使用for循环删除会报错,那么可以将要删除的key追加到一个列表内,然后用其他方式删除
>>> dic1 = {"name": "zuowei", "age": 18, "hobby": "lp"}
>>> l1 = []
>>> for k, v in dic1.items():
...     if v == "lp":
...             l1.append(k)         # 添加满足条件要删除的字典key到列表l1
...
>>> for i in l1:                     # 循环这个列表
...     del dic1[i]                  # 删除对应的key
...
>>> print(dic1)
{'name': 'zuowei', 'age': 18}

 

猜你喜欢

转载自blog.csdn.net/z_bright/article/details/84556679