如何从列表中删除特定项-Python
我是Python中的乞丐,我想从列表中删除一个特定的项,删除标准是当一个项包含三个firsts元素null时,它必须从主列表中删除。这就是我想要做的:如何从列表中删除特定项-Python,python,python-2.7,Python,Python 2.7,我是Python中的乞丐,我想从列表中删除一个特定的项,删除标准是当一个项包含三个firsts元素null时,它必须从主列表中删除。这就是我想要做的: a = [[0, 0, 0, 1],[0, 0, 1, 1],[1, 1, 1, 1]] temp = [] for i in range(len(a)): for j in range(len(a[i])): if a[j][0] + a[j][1] + a[j][2] == 0: temp =
a = [[0, 0, 0, 1],[0, 0, 1, 1],[1, 1, 1, 1]]
temp = []
for i in range(len(a)):
for j in range(len(a[i])):
if a[j][0] + a[j][1] + a[j][2] == 0:
temp = a.pop(j)
print temp
else:
print a
j += 1
i += 1
我得到了以下错误:
if a[j][0] + a[j][1] + a[j][2] == 0:
IndexError: list index out of range
我不知道我做错了什么
谢谢 您所需要的只是这个范围,在这种情况下是不必要的:
a = [[0, 0, 0, 1],[0, 0, 1, 1],[1, 1, 1, 1]]
newList = []
for i in a:
if i[0] + i[1] + i[2] != 0:
newList.append(i)
print newList
您可以使用列表理解来过滤子列表
>>> a = [[0, 0, 0, 1],[0, 0, 1, 1],[1, 1, 1, 1]]
>>> a = [i for i in a if any(i[:3])]
>>> a
[[0, 0, 1, 1], [1, 1, 1, 1]]
这基本上是通过使用切片来获取元素[0]到[2],然后使用any来检查是否存在非零值。如果要避免any方法调用,可以将a与一起使用
j变量的范围从0到4不等,但列表中只有3个项目。不,更改正在循环的列表,尤其是删除项目会导致与OP观察到的列表类似的错误。修改正在迭代的列表不是一个好主意。newList=[i for i in a if i[0]+i[1]+i[2]!=0]@Padraickenningham正常情况下,我也喜欢一句台词。我真的认为在这样的情况下这些都会发光;但他确实说过:我是Python的乞丐。对于这样一个简单的例子,列表的理解可能会让他更加困惑。他很快就会知道的。@Eithos,我想我们也不会使用filterlambda x:anyx[:3],所以;当他们有东西可以比较时,添加列表comp可能没有什么坏处
a = [[0, 0, 0, 1],[0, 0, 1, 1],[1, 1, 1, 1]]
b = [i for i in a if 1 in i[:3]]
# [[0, 0, 1, 1], [1, 1, 1, 1]]