2016-12-30 61 views

回答

6

可以嵌套循環做到這一點:

[item for i in list1 for item in (i, "{}#2".format(i))] 

for item in (...)內環路產生每次2項。

+1

'itertools.chain(* zip(list1,map(「{}#2」.format,list1)))'? :P –

+2

@JoranBeasley:是的,沒有。 –

2

也許我是唯一一個很難閱讀嵌套列表解析的人,但我傾向於避免他們像瘟疫。在這種情況下,我可能會使用一個香草循環:

lst_out = [] 
for item in list1: 
    lst_out.extend((item, '{}#2'.format(item))) 

或者另一種選擇是發電機功能:

def gen(list1): 
    for item in list1: 
     yield item 
     yield '{}#2'.format(item) 

這不是100%真實的...標準的嵌套列表拼合成語對我來說是相當可識別的,所以我已經使用過一次或兩次。也許我只是需要開始使用他們,讓他們變得更直觀...

0

你永遠不會做到這一點(其他的答案都是更好),但作爲一個思想運動:

from itertools import chain 
l = list(chain.from_iterable((x, x+'#2') for x in list1)) 
0

你仍然可以做你的嘗試(你只是缺少一些括號創建tuple S),然後再把「扁平化」的元組:

list2 = [(i, "{}#2".format(i)) for i in list1] 
list2 = [x for y in list2 for x in y] 

主要生產:

['pierre', 'pierre#2', 'paul', 'paul#2', 'jacques', 'jacques#2'] 
相關問題