2015-12-18 34 views
0

我想重複基於謂詞的列表元素。 我嘗試使用模塊itertools和列表理解python:在基於謂詞的列表中重複元素

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] 

列表理解是否可行?

感謝

回答

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是一個迭代器,也創造了她沒有多餘的列表。

+0

@stackoverflower這是否適合您? –

+0

是的,它的工作,謝謝! – stackoverflower

相關問題