使用生成器表达式返回多个值

时间:2017-09-24 05:19:10

标签: python python-2.7 python-3.x

我有一个清单

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 个答案:

答案 0 :(得分:3)

使用

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

答案 1 :(得分: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

中提到的生成器表达式