python: 列表中的重复元素基于 predicateHow

python: repeating elements in a list based a predicateHow

我想根据谓词重复列表的元素。 我尝试使用模块 itertools 和列表理解

abc = [1,2,3,4,5,6,7,8,9]
result = [ repeat(item,2) if item==3 or item==7 else item for item in abc ]

这不会在运行时失败,但生成的对象不是 'flattened' 如果我打印它,我会看到

[1, 2, repeat(3, 2), 4, 5, 6, repeat(7, 2), 8, 9]

列表理解是否可行?

谢谢

这个有效:

from itertools import repeat
abc = [1,2,3,4,5,6,7,8,9]
result = [x for y in (repeat(item,2) if item==3 or item==7 else [item] for item in abc) 
          for x in y]

>>> result
[1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9]

这里的技巧是将 item 放在它自己的列表 [item] 中,而不是展平现在一致嵌套的列表。

为了提高可读性,将其分为两行:

nested_items = (repeat(item,2) if item==3 or item==7 else [item] for item in abc)
result = [item for nested_item in nested_items for item in nested_item]

由于nested_items是一个迭代器,所以没有创建额外的列表。