我有一个清单
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
答案 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
中提到的生成器表达式