【发布时间】:2014-05-17 07:32:19
【问题描述】:
我需要帮助来对两个维度求和。
假设我有 [[0,1,2],[3,4,5]] 作为我的维度,将这些数字相加将返回 int 15。
def sum_dimensions(x):
x = []
answer = sum(x)
return int(x)
感谢指出我在代码中的错误。
【问题讨论】:
标签: python list int sum dimension
我需要帮助来对两个维度求和。
假设我有 [[0,1,2],[3,4,5]] 作为我的维度,将这些数字相加将返回 int 15。
def sum_dimensions(x):
x = []
answer = sum(x)
return int(x)
感谢指出我在代码中的错误。
【问题讨论】:
标签: python list int sum dimension
让我们稍微了解一下。我在我的机器上使用了以下数据集:
data = list(list(range(100000)) for i in range(1000))
我有以下结果:
In [13]: %%timeit
sum(sum(ele) for ele in data)
....:
1 loops, best of 3: 1.15 s per loop
In [14]: %%timeit
sum([sum([item for item in ele]) for ele in data])
....:
1 loops, best of 3: 3.78 s per loop
In [15]: %%timeit
sum(j for i in data for j in i)
....:
1 loops, best of 3: 4.92 s per loop
In [16]: %%timeit
sum(itertools.chain.from_iterable(data))
....:
1 loops, best of 3: 1.61 s per loop
In [18]: %%timeit
sum(map(sum, data))
....:
1 loops, best of 3: 1.16 s per loop
但是对于小型数据集,itertools 变体比sum(sum 变体快 2 倍。 sum(map(sum 似乎完全映射到 sum(sum(ele) for ele in data) 构造
【讨论】:
j for i in data for j in i 构造的性能有多糟糕,这很有趣,我没想到会这样。
它是 Python,而不是 C。
ar = [[0,1,2],[3,4,5]]
result = sum ( [sum(block) for block in ar] )
【讨论】:
如果你在做其他线性代数,可能值得考虑numpy:
import numpy as np
x = np.array( [[0,1,2],[3,4,5]] )
print np.sum(x)
【讨论】:
这就是你要找的:
data = [[0,1,2],[3,4,5]]
sum([sum([item for item in ele]) for ele in data])
15
正如@filmor 所指出的,这可以简化为:
data = [[0,1,2],[3,4,5]]
sum([sum(ele) for ele in data])
15
就您的代码而言,如果您将[[0,1,2],[3,4,5]] 作为x 传递给函数:
answer = sum(x)
会抛出一个TypeError。以下
return int(x)
也没有意义。使您的代码工作的方法是:
def sum_dimensions(x):
answer = sum(x)
return answer
data = [[0,1,2],[3,4,5]]
total_sum = 0
for sub_list in data:
total_sum += sum_dimensions(sub_list)
【讨论】:
sum([item for item in ele]) 可以写成sum(ele)。
sum(j for i in data for j in i)
math 和 itertools 来替换 Python 循环。
试试这个,
>>>sum([sum(i) for i in [[0,1,2],[3,4,5]]])
输出:
15
【讨论】:
你可以试试这个:
>>> l = [[0,1,2],[3,4,5]]
>>>
>>> sum(a for v in l for a in v)
15
【讨论】: