我想从一个列表中删除所有零并将它们全部附加到另一个列表但不是所有的都删除

i want to remove all zero from one list and append all of them to another list but not all of them remove

我想从一个列表中删除所有零并将它们附加到另一个列表,但是当多个零依次出现时,其中一个不会删除。

zero=[]
l=[2,3,6,0,0,5,6,0,7]
for i in l:
    if i==0:
        l.remove(i)
        zero.append(i)
print(l)
print(zero)


l=[2, 3, 6, 5, 6, 0, 7]
zer0=[0, 0]

在这个输出中,零之一,不删除

迭代对象时不要修改列表。相反,您可以使用副本。 l[:]

例如:

zero=[]
l=[2,3,6,0,0,5,6,0,7]
for i in l[:]:
    if i==0:
        l.remove(i)
        zero.append(i)
print(l)
print(zero)

您可以使用 numpy 模块中的 non_zero。它旨在查找所有不同于 0 的值。

如果你想得到所有的零,你可以用np.where

找到它们
l = [2, 3, 6, 0, 0, 5, 6, 0, 7]

import numpy as np
np_l = np.array(l)

non_zero = np_l[np.nonzero(np_l)]
print(non_zero)
# [2 3 6 5 6 7]

zero = np_l[np.where(np_l == 0)]
print(zero)
# [0 0 0]

您正在遍历正在修改的列表。 如果从该列表中删除当前元素,它将缩小并且 next(l) 将跳过一个元素。为避免这种情况,请始终遍历列表的副本。例如 list(l)l[:].

zero=[]
l=[2,3,6,0,0,5,6,0,7]
for i in list(l):
    if i==0:
        l.remove(i)
        zero.append(i)
print(l)
print(zero)

使用itertools.groupby:

from itertools import groupby

l=[2,3,6,0,0,5,6,0,7]

non_zeros = []
zeros = []
for v, g in groupby(l, lambda k: k==0):
    if v:
        zeros.extend(g)
    else:
        non_zeros.extend(g)

print(non_zeros)
print(zeros)

打印:

[2, 3, 6, 5, 6, 7]
[0, 0, 0]