亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在列表列表中的相同索引中添加數字

在列表列表中的相同索引中添加數字

HUX布斯 2023-10-18 15:44:06
說我有一個清單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]。


查看完整回答
反對 回復 2023-10-18
?
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]


查看完整回答
反對 回復 2023-10-18
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

以下代碼可能適合您的需求:

[sum(items) for items in zip(*a)]


查看完整回答
反對 回復 2023-10-18
  • 3 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號