簡體   English   中英

zip函數可為return語句存儲多個輸出

[英]zip function to store multiple outputs for a return statement

def somefunction():
    outputs = []
    a = 0
    while a < 100:
        if a%2 == 0:
            b = 2*a + 1
            outputs.append(list(zip(a,b)))
        a += 1
    return outputs

上面的代碼不是我正在使用的,但是會產生相同的錯誤,為什么上面的代碼返回:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
TypeError: zip argument #1 must support iteration

這是一種將函數中所有項目作為一個對象返回的特別有效的方法嗎? 如果沒有,什么是更好的方法?

由於其確切的錯誤消息,它返回該錯誤。 也就是說, zip參數必須支持迭代。 您只有兩個要“存儲在一起”的數字。 在這種情況下,我假設您要查找的是元組數據類型。 要么將其與現有的列表數據類型“放在一起”,要么將它們“放在一起”。 拉鏈是完全不必要的。 我建議閱讀更多有關Python的內置類型的信息

只需獲取元組列表!! (或列出,如果您願意的話,但是由於您不能更改元組並且要返回所有輸出,因此元組更有意義)

def somefunction():
    outputs = []
    a = 0
    while a < 100:
        if a%2 == 0:
            b = 2*a + 1
            tup = (a,b)
            outputs.append(tup)
        a += 1
    return outputs

這里不需要使用zip ,zip是用於將兩個列表連接在一起的,您只有兩個整數,因此可以將它們存儲在元組中,然后appendappendoutputs

何時可以使用zip

如果你存儲的所有郵編將工作a S IN a_list和所有b S IN b_list 然后,您可以執行以下操作:

outputs.append(zip(a_list,b_list))

這是沒有必要的,因為您可以append ab一起append到一個元組中以output ,就像我的示例一樣。 但這就是這樣做的方式。

在這種情況下,您還可以使用列表理解:

def f():
    return [(x, 2*x + 1) for x in range(100) if x%2 == 0]

暫無
暫無

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

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