从python中的列表中删除第一个出现的零

时间:2017-09-22 05:27:31

标签: python-3.x

我想删除最初从列表中出现的零列表,但是我尝试的方法表现得很奇怪。

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]

并且还假设列表增长或减少,所以我不能保持零的范围并删除它们。我哪里错了。

4 个答案:

答案 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))