列表理解中函数调用的多个 return

Multiple return from function call in list comprehension

我需要解释与此特定案例相关的 Python 的功能:我有一个列表理解,它为 listA 的每个元素调用一个函数。使用此代码:

listA = [1,1,1]

def operation(n):
    result = []
    *code do something*
    result = [a,b,c]
    return result 

listB = [operation(element) for element in listA]

我获得:

listB = [[a,b,c],[a,b,c],[a,b,c]]

我怎样才能 return 单独的列表的多个元素来实现这个?

listB = [a,b,c,a,b,c,a,b,c]

我试过的是:

ListA = [1,1,1]

def operation(n):
    result = []
    *code do something*
    result = [a,b,c]
    for x in result:
        return x

输出:[a,a,a] 而不是 [a,b,c,a,b,c,a,b,c]

注意 1:不能使用任何导入

注2:我举了一个简单的案例,我无法将列表转换为平面列表,我需要的是能够从一次调用中return多个值,这可能吗?谢谢

您可以迭代每个返回列表的项目以展平输出:

listB = [item for element in listA for item in operation(element)]

请注意,for 表达式的顺序与编写 'normal' 循环时的顺序相同。

以下应该有效(对于您列表的这个特定结构,不推荐用于其他一些结构):

listB = sum([operation(element) for element in listA], [])

试试这个:

listA = [1, 1, 1]

def operation(n):
    result = [i for i in ["a", "b", "c"] * len(listA) for x in i]
    return result

listB = operation(listA)
print(listB)

我们在创建嵌套 for 循环时提供了一个展平列表。

您可以将您的函数用作生成器,并通过元素进行二次循环,然后遍历生成器以获取您的列表。

listA = [1,1,1]

def operation(n):
    result = []
    ...
    result = ['a','b','c']
    
    ############
    for i in result:
        yield i      #change this to yield
    ############
    
[j for i in listA for j in operation(i)]
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

如果您只想实现最终输出,一种方法是使用这样的扩展函数

for i in listA:
    listB.extend(operation(listA))

这也会生成相同的结果,但它不是列表理解