我想从一个列表中删除所有零,并将它们附加到另一列表中,但是当一个以上的零互相接连时,其中一个不会删除。
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]
此输出为零,不会删除
答案 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]