[英]List comprehension in python if/else
輸入
['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']
沒有列表理解,但恕我直言,這是一個更容易的解決方案。
a = ['27', ' 5', '6', ' 0', ' 0', 'LOL', '34','32','LOL']
def remove_duplicates(w_duplicates):
wo_duplicates = []
for el in w_duplicates:
if wo_duplicates and el == wo_duplicates[-1]:
continue
wo_duplicates.append(el)
return wo_duplicates
print remove_duplicates(a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.