【问题标题】:List comprehension in python if/elsepython if/else中的列表理解
【发布时间】: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


【解决方案1】:

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

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

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

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

[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 &lt; 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']

【讨论】:

  • 这正是我所需要的。谢谢:)
【解决方案2】:

没有列表理解,但恕我直言,这是一个更简单的解决方案。

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)

【讨论】:

  • 很好,我也找到了没有列表理解的解决方案。但列表理解是我一直在寻找的。​​span>
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2018-04-27
  • 2017-04-26
  • 2020-08-27
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多