2012-01-13 79 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中的每個元素,並將它們相加。

相關問題