迭代时删除列表列表

时间:2016-02-22 21:52:14

标签: python list list-comprehension

我知道你不应该在迭代它时删除列表的元素,但我必须这样做。 我试图迭代列表列表,如果我在列表列表中找到值,我需要将其删除。 这是我到目前为止所尝试过的。

dict[["A1","A2"],
     ["B1","B2"],
     ["C1","C2"]]

for i in range(len(dict)):
    if dict[i][0]=="A1":
        dict.pop(i)

但它给了我一个超出范围的错误。 如何使用列表推导或任何其他方法来实现?

3 个答案:

答案 0 :(得分:3)

你是说这个吗?

old = [["A1","A2"], ["B1","B2"], ["C1","C2"]]
new = [x for x in old if x[0] != "A1"]

答案 1 :(得分:1)

你不能。你会得到一个例外。创建一个新列表作为副本。

>>> disallowed = [1, 2, 3]
>>> my_list = [ [1, 2, 3, 4, 5, 6, 7], [3, 3, 4, 5, 8, 8, 2] ]
>>> filtered_list = [[y for y in x if y not in disallowed] for x in my_list]
>>> print filtered_list
[[4, 5, 6, 7], [4, 5, 8, 8]]

答案 2 :(得分:1)

实际上,您可以在迭代时从列表中删除它,只要向后提供它(因此删除只会影响您在此迭代期间已经看到的更高的索引):

data = [["A1","A2"],
        ["B1","B2"],
        ["C1","C2"]]

for i, pair in reversed(data):
    if pair[0] == 'A1':
        del data[i]