2017-09-24 60 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