我想删除最初从列表中出现的零列表,但是我尝试的方法表现得很奇怪。
a = [0,0,0,0,0,0,0,0,3,4,0,6,0,14,16,18,0]
for i in a:
if i == 0: a.remove(i)
else: pass
print (a)
>>> [0, 3, 4, 0, 6, 0, 14, 16, 18, 0]
但我需要像这样的输出
[3,4,0,6,0,14,16,18,0]
并且还假设列表增长或减少,所以我不能保持零的范围并删除它们。我哪里错了。
答案 0 :(得分:5)
您的循环会跳过项目。你删除一个,然后迭代到下一个位置。
只需找到第一个非零的位置并修剪列表
a = [0,0,0,0,0,0,0,0,3,4,0,6,0,14,16,18,0]
i = 0
while a[i] == 0:
i+=1
print(a[i:]) # [3, 4, 0, 6, 0, 14, 16, 18, 0]
答案 1 :(得分:2)
def removeLeadingZeros(a):
for l in a:
if l == 0:
a = a[1:]
else:
break
return a
或者如果你想将它作为使用numpy数组的oneliner:
a = list(a[np.where(np.array(a) != 0)[0][0]:]) # you could remove the list() if you don't mind using numpy arrays
答案 2 :(得分:2)
与已经给出的答案略有不同,所以这里是:
a = [0,0,0,0,0,0,0,0,3,4,0,6,0,14,16,18,0]
for i in range(0, len(a)):
if a[i] != 0:
a = a[i:]
break
print (a)
答案 3 :(得分:1)
itertools.dropwhile
就会删除iterable的元素:
from itertools import dropwhile
a = list(dropwhile(lambda x: x==0, a))