Python 在二维列表中删除所需列表

Python 在二维列表中删除所需列表,python,Python,假设我有这样一个2d列表: list=[[1,2,3],“a”,5,6],[7,8,9],[10,11,12]。 我想删除一个以a开头的列表。以下是我尝试过的: for i in range(0, len(list)): if list[i][0] == "a": list.pop(i) 在这里,我试图删除一个以a开头的列表。然而,它给了我一个错误的说法 索引器:列表索引超出范围 我不确定这里有什么问题。这很奇怪,因为当我尝试打印(list[I])时,它会打印匹配

假设我有这样一个2d列表:

list=[[1,2,3],“a”,5,6],[7,8,9],[10,11,12]。

我想删除一个以
a
开头的列表。以下是我尝试过的:

for i in range(0, len(list)):
     if list[i][0] == "a":
          list.pop(i)
在这里,我试图删除一个以
a
开头的列表。然而,它给了我一个错误的说法

索引器:列表索引超出范围

我不确定这里有什么问题。这很奇怪,因为当我尝试打印(list[I])时,它会打印匹配的行,即“[“a”,2,3]


我期待着
list=[[1,2,3],[7,8,9],[10,11,12]]
作为我的最终列表

使用
列表
理解:

[x for x in my_list if x[0] != 'a']
一般来说,在内嵌(
list
)之后命名变量不是一个好主意,因为您将隐藏这些内嵌


另外,正如其他人所指出的,您最初的问题是在对列表进行迭代时对列表进行了变异。

使用
列表
理解:

[x for x in my_list if x[0] != 'a']

发生的情况是,当您从列表中删除项目时,列表长度变短。它仍将尝试在
i=3
处循环

您可以使用
while
循环,因为它每次都检查。另外,由于没有使用弹出的值,请使用
del

list = [[1, 2, 3], ["a", 5, 6], [7, 8, 9], [10, 11, 12]]
i = 0
while i < len(list):
    if list[i][0] == "a":
        del list[i]
    else:
        i += 1
list=[[1,2,3],“a”,5,6],[7,8,9],[10,11,12]]
i=0
而我

相关:

使用过滤器的方法如何?我还将列表重命名为
l
,这样就不会覆盖内置数据类型

from operator import itemgetter

f = itemgetter(0)

def test(sublist):
    return f(sublist) != 'a'

list(filter(test, l))

[[1, 2, 3], [7, 8, 9], [10, 11, 12]]
你也可以用这个

li = [[1, 2, 3], ["a", 5, 6], [7, 8, 9], [10, 11, 12]]

#Filter on first element not being equal to a
res = filter(lambda x: x[0] != 'a', li)

#Print the result
print(list(res))
#[[1, 2, 3], [7, 8, 9], [10, 11, 12]]

您在循环中更改了
list
的长度。问题是您在迭代列表时修改了列表。因为你从列表中删除了一些项目,所以在某一点上你的列表比以前的列表要短。啊哈,我明白了。。。我现在明白了。。。非常感谢。