【发布时间】:2017-06-01 10:01:51
【问题描述】:
输入
['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)
【问题讨论】:
-
预期输出背后的逻辑是什么?您的代码失败,因为
repeat(..., (y//4))将导致任何y < 4重复零,因此根本不执行左侧表达式(零项上的循环不会产生迭代)。 -
'34'和'32'消失到哪里去了?为什么连续的' 0', ' 0'不产生'LOL'? -
我的坏人。我忘了编辑它们。对不起!!
-
4的重复计数是否真的相关?是否只想替换4的倍数? -
是的,它是相关的
标签: python list python-3.x list-comprehension itertools