我有形式的列表的列表:求和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
中的每个元素,并将它们相加。