gpt4 book ai didi

python - python if/else 中的列表理解

转载 作者:行者123 更新时间:2023-11-30 22:36:07 25 4
gpt4 key购买 nike

输入

['27', ' 5', '6', ' 0', ' 0', '', '', '', '','','','','','34','32','','','','']

我希望我的输出是这样的。逻辑是用单个新项目替换 4 个连续的重复空字符串 ' ',同时保留其余项目。

['27', ' 5', '6', ' 0', ' 0', 'LOL','LOL', '34','32','LOL']

我很困惑为什么这只会给出输出

['LOL','LOL','LOL']

我的代码如下:

from itertools import groupby,repeat
L = ['27', ' 5', '6', ' 0', ' 0', '', '', '', '','','','','','34','32','','','','']
grouped_L = [(k, len(list(g))) for k,g in groupby(L)]

final_list = [z if x=='' else x for x,y in grouped_L for z in repeat('LOL',(y//4)) ]
print(final_list)

最佳答案

最里面的循环不会产生任何 y < 4 的结果:

>>> from itertools import repeat
>>> y = 4
>>> list(repeat('LOL', y // 4))
['LOL']
>>> y = 3
>>> list(repeat('LOL', y // 4))
[]

如果没有迭代,则不会将任何内容添加到结果列表中。

您需要使用不同的策略;您需要包括 LOL对于长度为 y 的组4 及以上,对于其他所有内容,请使用原始版本,并且始终重复:

[value
for x, y in grouped_L
for value in repeat(x if y < 4 else 'LOL', y if y < 4 else y // 4)]

所以上面要么包括 x * y对于 y < 4 ,否则它将包括 'LOL' * (y // 4)对于其他任何事情:

>>> [value
... for x, y in grouped_L
... for value in repeat(x if y < 4 else 'LOL', y if y < 4 else y // 4)]
['27', ' 5', '6', ' 0', ' 0', 'LOL', '34', '32', 'LOL']

关于python - python if/else 中的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304496/

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