预期输出与给定输出不同

时间:2021-04-21 10:49:40

标签: python list remove

a = [[4, 2, 1],[3, 3, 1], [3, 4, 1],[4, 3, 1],[5, 2, 1]]
for x in a:
    if x[0]>3 or x[1]>3:
        a.remove(x)
print(a)

我希望输出为 [[3,3,1]] 给定的输出是 [[3, 3, 1], [4, 3, 1]]

我的代码有什么问题?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您不能在循环时修改列表,原因很简单,因为索引和序列发生了变化。

改为尝试列表理解:

a = [[4, 2, 1],[3, 3, 1], [3, 4, 1],[4, 3, 1],[5, 2, 1]]
print([lst for lst in a if not (lst[0]>3 or lst[1]>3)])

或者以一种更容易理解的方式,在循环遍历旧列表时创建一个新列表,检查条件,而不更改旧列表。

a = [[4, 2, 1],[3, 3, 1], [3, 4, 1],[4, 3, 1],[5, 2, 1]]
out = []
for lst in a:
    if not(lst[0] > 3 or lst[1]>3):
        out.append(lst)

答案 1 :(得分:1)

您可以遍历列表的副本并从原始列表中删除

a = [[4, 2, 1], [3, 3, 1], [3, 4, 1], [4, 3, 1], [5, 2, 1]]
for x in a[:]:
    if x[0] > 3 or x[1] > 3:
        a.remove(x)
print(a)

答案 2 :(得分:1)

您需要为它创建一个 newlist

a = [[4, 2, 1],[3, 3, 1], [3, 4, 1],[4, 3, 1],[5, 2, 1],[2,2,1]]
newlist=[]
for x in range(len(a)):
    if (a[x][0]<=3) and (a[x][1]<=3):
        newlist.append(a[x])
        
print(newlist)

输出如下:

[[3, 3, 1], [2, 2, 1]]