在列表列表中的相同索引中添加数字
Adding numbers in the same indices in list of lists
假设我有一个列表 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 指出的那样,使用 map
和 zip
更简单。
同样正如每个人都指出的那样,它应该 而不是 len(a)+1
而是 len(a[0])
非常感谢大家!
这可以很简单地使用 python 的 built-ins:
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]
.
以下代码可能适合您的需要:
[sum(items) for items in zip(*a)]
在 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]
假设我有一个列表 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 指出的那样,使用 map
和 zip
更简单。
同样正如每个人都指出的那样,它应该 而不是 len(a)+1
而是 len(a[0])
非常感谢大家!
这可以很简单地使用 python 的 built-ins:
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]
.
以下代码可能适合您的需要:
[sum(items) for items in zip(*a)]
在 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]