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
是一个迭代器,所以没有创建额外的列表。
我想根据谓词重复列表的元素。 我尝试使用模块 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
是一个迭代器,所以没有创建额外的列表。