Python 在二维列表中删除所需列表
假设我有这样一个2d列表: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])时,它会打印匹配
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
的长度。问题是您在迭代列表时修改了列表。因为你从列表中删除了一些项目,所以在某一点上你的列表比以前的列表要短。啊哈,我明白了。。。我现在明白了。。。非常感谢。