Python:如何从列表中删除包含None的列表?

4

我有这样一个东西:

myList = [[1, None, None, None, None],[2, None, None, None, None],[3, 4, None, None, None]]

如果列表中的任何一个列表有4个Nones,我希望将它们删除,以便输出为:

myList = [[3, 4, None, None, None]]

我尝试使用以下方式:

for l in myList:
    if(l.count(None) == 4):
        myList.remove(l)

但是它只能一直删除其中的一半,尽管我知道if语句执行正确,会导致如下结果:

[[2, None, None, None, None], [3, 4, None, None, None]] 

我用这种方法设法让它工作了,但似乎不太对:
for l in myList:
    if(l.count(None) == 4):
        del l[0]
        del l[0]
        del l[0]
        del l[0]
        del l[0]

myList = list(filter(None, myList))

有更好的方法吗?提前感谢。我正在使用Python 3.3。

3
你的 for 循环没有起作用是因为你改变了正在迭代的列表。绝不要这样做。 - Luigi
是的,很有道理。值得注意。我仍然感到惊讶的是它始终删除了一半。我可以通过运行程序来使它工作,这会删除一半,然后再次运行程序,这将删除其中的一半,然后不断重复此过程,直到它们全部被删除。 - Charles Clayton
1个回答

6
您可以这样做:

my_new_list = [i for i in myList if i.count(None) < 4]

[OUTPUT]
[[3, 4, None, None, None]]

问题在于您在遍历列表时修改了它。如果您想使用这种循环结构,请改为如下操作:
i = 0
while i < len(myList):
    if(myList[i].count(None) >= 4):
        del myList[i]
    else:
        i += 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接