gpt4 book ai didi

python - 如何在 python 中删除?

转载 作者:行者123 更新时间:2023-11-28 19:35:02 25 4
gpt4 key购买 nike

我有一个数字列表,例如:

l=[0.01,0.02,0.01,-0.01,0,0,0,0,0,0,0,0,0,0]

我想知道的是,我需要删除多少个前导值才能获得全零列表?

所以这里的答案是4

我在想,把列表倒过来,然后用for循环和计数器往下跑列表,直到找到第一个非零元素,然后减去计数器和列表长度,但是好像有点难看。

是否有一种很好的“pythonic”方式来做到这一点?

(为清楚起见编辑:

l=[0.01,0.02,0.01,-0.01,0,0,0,0,0,0,1,0,0,0]

应该转到 11,所以我不能只使用过滤器。我想知道生产者花了多长时间才稳定到输出连续为零的点)

最佳答案

您可以为此使用 itertools.dropwhileitertools.takewhile:

>>> l = [0.01,0.02,0.01,-0.01,0,0,0,0,0,0,0,0,0,0]
>>> import itertools
>>> list(itertools.dropwhile(lambda x: x != 0, l))
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> list(itertools.takewhile(lambda x: x != 0, l))
[0.01, 0.02, 0.01, -0.01]
>>> sum(1 for _ in itertools.takewhile(lambda x: x != 0, l))
4

但是,如果您希望列表仅包含 0,那么如果有零元素然后又是非零元素,则从前面删除可能不起作用。相反,您最好从末尾开始,使用 reversed,直到找到第一个非零元素。

>>> sum(1 for _ in itertools.takewhile(lambda x: x == 0, reversed(l)))
10
>>> sum(1 for _ in itertools.dropwhile(lambda x: x == 0, reversed(l)))
4

这里,第一个是从列表末尾开始的连续零的数量,第二个是从末尾再次从第一个非零开始的剩余元素的数量。

关于python - 如何在 python 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com