gpt4 book ai didi

python - 从列表中删除某些特定元素之前的元素

转载 作者:太空狗 更新时间:2023-10-29 22:01:49 26 4
gpt4 key购买 nike

假设我有一个列表:

a = ['no', 'no', 'no', 'yes', 'no', 'yes', 'no']

在这里,我想删除每个'no' 之前的每个'yes'。所以我的结果列表应该是这样的:

['no', 'no', 'yes', 'yes', 'no']

我发现,为了根据值从列表中删除一个元素,我们可以使用 list.remove(..) 作为:

a = ['no', 'no', 'no', 'yes', 'no', 'yes', 'no']
a.remove('no')
print a

但它只删除第一次出现的 'no' 给我的结果是:

['no', 'no', 'yes', 'no', 'yes', 'no']

如何通过删除列表中所有 'yes' 前面出现的所有 'no' 来达到预期的结果?

最佳答案

要删除列表中 'yes' 之前出现的所有 'no',您可以使用列表理解itertools.zip_longest(...)在 Python 3.x 中(相当于 Python 2.x 中的 iterools.izip_longest(..))(默认 fillvalueNone) 来实现这个作为:

>>> a = ['no', 'no', 'no', 'yes', 'no', 'yes', 'no']

# Python 3.x solution
>>> from itertools import zip_longest
>>> [x for x, y in zip_longest(a, a[1:]) if not(x=='no' and y=='yes')]
['no', 'no', 'yes', 'yes', 'no']

# Python 2.x solution
>>> from itertools import izip_longest
>>> [x for x, y in izip_longest(a, a[1:]) if not(x=='no' and y=='yes')]
['no', 'no', 'yes', 'yes', 'no']

您可能有兴趣查看 zip_longest document其中说:

Make an iterator that aggregates elements from each of the iterables. If the iterables are of uneven length, missing values are filled-in with fillvalue. Iteration continues until the longest iterable is exhausted.

关于python - 从列表中删除某些特定元素之前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354756/

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