我有形式的列表的列表:求和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]))
什麼是做到不使用循環的最佳方式?
我有形式的列表的列表:求和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]))
什麼是做到不使用循環的最佳方式?
sum(a[0] for a in my_list)
就足夠了。
假設每個子列表有三個要素,你可以這樣做:
sum(a for (a,_,_) in my_list)
否則,這樣做:
sum(a[0] for a in my_list)
技術上,這些使用中的循環發電機的幌子,但任何事情你通過總和會結束循環,這種或那種方式。
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
>>> my_list
[[1, 2, 'A'], [4, 5, 'B'], [7, 8, 'C']]
>>> sum([a[0] for a in my_list])
12
>>>
將創建由第一個元素的列表在my_list
中的每個元素,並將它們相加。