我有一份表单列表:
my_list=[[1,2,'A'],[4,5,'B'],[7,8,'C']]
我希望将每个列表的第一个元素(1 + 4 + 7)相加得到一个总和。我尝试了以下无法正常工作,因为列表中的某些元素是字符串:
new_list = list(zip(*my_list))
print (sum(new_list[0]))
如果不使用循环,最好的方法是什么?
答案 0 :(得分:6)
sum(a[0] for a in my_list)
就足够了。
答案 1 :(得分:1)
假设每个子列表都有三个元素,您可以这样做:
sum( a for (a,_,_) in my_list )
否则,请执行以下操作:
sum( a[0] for a in my_list )
从技术上讲,它们以发生器的形式使用循环,但是你传递给sum的任何东西都会以这种或那种方式循环。
答案 2 :(得分:1)
>>> my_list
[[1, 2, 'A'], [4, 5, 'B'], [7, 8, 'C']]
>>> sum([a[0] for a in my_list])
12
>>>
将创建一个由my_list
中每个元素的第一个元素组成的列表,并将它们相加。
答案 3 :(得分:0)
In [1]: import operator
In [2]: my_list=[[1,2,'A'],[4,5,'B'],[7,8,'C']]
In [3]: sum(map(operator.itemgetter(0),my_list))
Out[3]: 12
或使用生成器表达式:
In [4]: sum(row[0] for row in my_list)
Out[4]: 12
生成器表达式更快,更易于阅读:
In [5]: %timeit sum(map(operator.itemgetter(0),my_list))
1000000 loops, best of 3: 1.52 us per loop
In [6]: %timeit sum(row[0] for row in my_list)
1000000 loops, best of 3: 1.02 us per loop