2012-01-13 83 views
0

我有形式的列表的列表:求和2D列表列,其中一些元素是字符串

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

什么是做到不使用循环的最佳方式?

回答

6
sum(a[0] for a in my_list) 

就足够了。

1

假设每个子列表有三个要素,你可以这样做:

sum(a for (a,_,_) in my_list) 

否则,这样做:

sum(a[0] for a in my_list) 

技术上,这些使用中的循环发电机的幌子,但任何事情你通过总和会结束循环,这种或那种方式。

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 
1
>>> my_list 
[[1, 2, 'A'], [4, 5, 'B'], [7, 8, 'C']] 
>>> sum([a[0] for a in my_list]) 
12 
>>> 

将创建由第一个元素的列表在my_list中的每个元素,并将它们相加。

相关问题