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