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