求和2D列表列,其中一些元素是字符串

时间:2012-01-13 10:48:03

标签: python list

我有一份表单列表:

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])) 

如果不使用循环,最好的方法是什么?

4 个答案:

答案 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