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

时间:2019-07-17 13:06:55

标签: python python-3.2

我想从一个列表中删除所有零,并将它们附加到另一列表中,但是当一个以上的零互相接连时,其中一个不会删除。

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]

此输出为零,不会删除

4 个答案:

答案 0 :(得分:1)

在迭代对象时不要修改列表。相反,您可以使用副本。 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)

答案 1 :(得分:0)

您可以从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]

答案 2 :(得分: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)

答案 3 :(得分:0)

使用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]