簡體   English   中英

遍歷列表中不同大小的元組

[英]Iterating through tuples of varying sizes in a list

這是一個從元組中的三個選項中找出最小數字的練習。 如果元組沒有正好三個選項,那么應該跳過它。

為什么下面的代碼不起作用。 我認為 len() 返回一個 integer 並且與 3 的 integer 相當,開始第二個 for 循環來解決問題。 感謝您提前提供的任何幫助,

xoxo

data = [
    (3),
    (7, 3, 5),
    (15, 20, 40),
    (300, 550, 137),
    ]


for i in range(len(data)):
    variable = len(data[i])
    if variable == 3:
        for num1, num2, num3 in data[i]:
            if num1 < num2:
                if num1 < num3:
                    answer.insert(0, num1)
            if num2 < num1:
                if num2 < num3:
                   answer.insert(0, num1)
            else:
                answer.insert(0, num3)

打印(答案)

我已經測試以確保使用 len() 的 for 循環中的 integer 給出了正確的值。 我已經嘗試過 data[i] 變量,希望這是問題所在。 當我刪除單個 3 元組時,找出最小數字的循環起作用了,但在更大規模的數據中,這不是一個選項。

再次感謝!

您在這里進行了額外的迭代:

        for num1, num2, num3 in data[i]:
            if num1 < num2:

這將遍歷data[i]的每個元素,然后嘗試將其解構為num1, num2, num3 (這失敗了,因為data[i]本身就是你想要的三元組,至少如果我正確地解釋了你的描述-- 查看data的樣本值會很有幫助)。

我認為您想要做的是將data[i]本身解構為 3 個元素,而不是嘗試將其每個元素解構為另外 3 個元素:

        num1, num2, num3 = data[i]
        if num1 < num2:

完成整個事情的一種更簡單的方法是在列表理解中使用min function:

answer = [min(t) for t in data if len(t) == 3]

嘗試解包每個元組更簡單,如果引發異常則捕獲生成的ValueError

for t in data:
    try:
        num1, num2, num3  = t
    except ValueError:
        continue

    # Process num1, num2, and num3 to determine
    # which gets added to answer here.
    ...

暫無
暫無

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

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