[英]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.