說我有一個清單a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]。我想創建一個新列表,b新列表中的每個值都是每個子列表的該索引位置中所有值的總和。所以在這種情況下它將是[15,18,21,24](1+5+9, 2+6+10, 3+7+11, 4+8+12) 。這就是我的代碼目前的樣子。a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]for i in range(len(a)+1): b.append(sum(b[i] for b in a))print(b)>>> [15, 18, 21, 24]我嘗試使用列表理解來簡化為:b=[sum([c[i]] for c in a) for i in range(len(a)+1)]但是我得到一個錯誤TypeError: unsupported operand type(s) for +: 'int' and 'list'我嘗試過用谷歌搜索這個問題,但我所能找到的只是人們將列表添加到整數。在此代碼中,它應該只添加整數 ( a[c[i]])。我做錯了什么?編輯:正如 Marc Ittel 指出的那樣,[c[i]]應該有c[i]. 然而,正如 Yatu 指出的那樣,使用mapandzip更簡單。也正如每個人都指出的那樣,它不應該是len(a)+1,而是len(a[0])非常感謝大家!
3 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
使用 python 的內置函數可以非常簡單地完成此操作:
list(map(sum,zip(*a)))
#[15, 18, 21, 24]
您的方法產生了預期的結果,b但不確定您是如何定義的?如果它是一個空列表b=[],則效果很好。另外,您確定這是為了 -for i in range(len(a)+1)嗎?難道您不應該迭代內部列表中盡可能多的項目嗎?
您的列表理解應該是:
[sum(b[i] for b in a) for i in range(4)]
# [15, 18, 21, 24]
在您的代碼中,您處于[c[i]]內部級別。您正在生成一個您不需要的列表的列表。只需索引列表并保留整數即可b[i]。

ITMISS
TA貢獻1871條經驗 獲得超8個贊
在 中sum,您嘗試添加列表,刪除括號可以解決您的問題。
另外,i結束于len(a[0]),而不是len(a)+1
>>> a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
>>> [sum(c[i] for c in a) for i in range(len(a[0]))]
[15, 18, 21, 24]
添加回答
舉報
0/150
提交
取消