不幸的是,我搜索了 stackoverflow,但找不到答案或改編類似的代碼。問題是我有一個元組串列:
tupl = [(5,3,33), (2,5,2), (4,1,7)]
我應該使用串列理解來獲得這個輸出:
[8,7,5]
我寫的代碼有點垃圾,是:
sum_tupl = []
tupl = [(5,3,33), (2,5,2), (4,1,7)]
sum_tupl = [tupl[0][0] tupl[0][1] for tuple in tupl]
sum_tupl
但它沒有做我想做的事,而是回傳
[8,8,8]
這是執行 3 次的第一對夫婦的總和。我嘗試使用一個變體:
tupl = [(5,3,33), (2,5,2), (4,1,7)]
sum_tupl = [sum(tupl[0],tupl[1]) for tuple in tupl]
sum_tupl
(缺少一些東西)但無濟于事。
uj5u.com熱心網友回復:
注意:當您開始使用 python 時,使用回圈而不是串列推導式要容易得多,因為這樣您可以更輕松地除錯代碼,無論是使用print()陳述句還是使用除錯器單步除錯。
現在,進入答案:
當你這樣做時for x in y,用一個串列y,單個專案進入x。所以對于你的代碼for tuple in tupl,你不應該使用,tupl因為那是整個串列。您需要使用串列中的單個專案,即tuple。
請注意,命名變數不是一個好主意,tuple因為它已經是 python 中的內置型別。
你需要:
tupl = [(5,3,33), (2,5,2), (4,1,7)]
sum_tupl = [t[0] t[1] for t in tupl]
這給出了串列
sum_tupl: [8, 7, 5]
如果您想對更多元素求和,使用sum()函式和切片t而不是寫出所有內容更有意義。例如,如果你想對前 5 個元素求和,你會寫
sum_tupl = [sum(t[0:5]) for t in tupl]
代替
sum_tupl = [t[0] t[1] t[2] t[3] t[4] for t in tupl]
uj5u.com熱心網友回復:
您訪問tupl串列的第一個元素的每次回圈迭代,而不是使用當前元素。這就是你想要的:
sum_tupl = [t[0] t[1] for t in tupl]
uj5u.com熱心網友回復:
我更喜歡切片:
>>> [x y for x, y, *_ in tupl]
[8, 7, 5]
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339439.html
上一篇:在同一索引上附加專案
下一篇:CPython串列實作細節
