【问题标题】:Return multiple values with generator expression使用生成器表达式返回多个值
【发布时间】:2017-09-24 05:19:10
【问题描述】:

我有一个清单

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

【问题讨论】:

  • 就像您链接到的那个问题中的第二个答案一样,只是将列表理解转换为生成器。

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


【解决方案1】:

使用

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

【讨论】:

    【解决方案2】:

    在函数中使用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中提到的生成器表达式

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 2021-04-07
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2019-08-11
      • 2013-06-17
      相关资源
      最近更新 更多