我想基于谓词重复列表的元素。 我尝试使用模块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 ]
这在运行时不会失败,但是生成的对象不会被压平' 如果我打印它,我会看到
[1, 2, repeat(3, 2), 4, 5, 6, repeat(7, 2), 8, 9]
列表理解是否可行?
由于
答案 0 :(得分:1)
这有效:
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
是一个迭代器,因此没有创建额外的列表。