簡體   English   中英

在列表理解中從 function 調用多次返回

[英]Multiple return from function call in list comprehension

我需要解釋與此特定案例相關的 Python 的功能:我有一個列表理解,它為 listA 的每個元素調用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]]

如何單獨返回列表的多個元素以實現此目的?

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

Output: [a,a,a]代替[a,b,c,a,b,c,a,b,c]

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

注意2:我提出了一個簡單的案例,我無法將列表轉換為平面列表,我需要的是能夠從一次調用中返回多個值,這可能嗎? 謝謝

您可以迭代每個返回列表的項目以展平 output:

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

請注意, for表達式的順序與編寫“正常”循環時的順序相同。

嘗試這個:

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 循環時,我們提供了一個扁平化列表。

以下應該有效(對於您列表的這個特定結構,不推薦用於其他一些結構):

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

您可以使用 function 作為生成器,並通過元素進行二次循環,然后遍歷生成器以獲取列表。

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']

如果你只是想實現你的最終 output 一種方法可以通過像這樣使用擴展 function

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

這也會產生相同的結果,但它不是列表理解

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM