2017-09-24 63 views
2

我有一個列表返回多個值與發電機表達

a = ["a", "b", "c"] 

我想創建一個後綴(「_ IND」)重複值的新列表。

["a", "a_ind", "b", "b_ind", "c", "c_ind"] 

我知道它可以用下面的函數(List with duplicated values and suffix

def duplicate(lst): 
    for i in lst: 
     yield i 
     yield i + "_ind" 

如何相同的功能可以利用發電機表達來實現來實現?我試着用下面的代碼,但它不工作。

duplicate = (i i+'_ind' for i in a) 

File "<stdin>", line 1 
duplicate = (i i+'_ind' for i in a) 
      ^
SyntaxError: invalid syntax 
+2

像你鏈接到這個問題的第二個答案中提到,除了平凡打開列表理解成發電機。 –

回答

3

使用

duplicate = (j for i in a for j in (i, i+'_ind')) 
1

yield在函數中使用,他們返回各yield聲明的值。這意味着,如果您有兩個收益率,每個收益率將在每個步驟返回一個單一值。但是,在生成器表達式中,您不能返回兩個值來保持返回值不變,而是必須將其作爲元組返回。但是在提取值的時候可以將元組展平。因此,對於你的情況下,你可以這樣做:

>>> a = ["a", "b", "c"] 
>>> duplicate = ((i, i+'_ind') for i in a) 
#    ^return it as a tuple 

>>> [i for s in duplicate for i in s] 
['a', 'a_ind', 'b', 'b_ind', 'c', 'c_ind'] 

或者,您可以使用生成器表達式爲Oluwafemi Sule's answer