为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信