繁体   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