有更明智的方法吗?我想通过总结许多其他列表的索引来创建一个新列表.我对编程很新,这看起来像一个非常笨重的方法!
list1 = [1,2,3,4,5]
list2 = [1,1,1,4,1]
list3 = [1,22,3,1,5]
list4 = [1,2,5,4,5]
...
list100 = [4,5,6,7,8]
i = 0
while i < len(list1):
mynewlist[i] = list1[i]+list2[i]+list3[i]+list4[i]+...list100[i]
i = i+1
Run Code Online (Sandbox Code Playgroud)
Sha*_*hin 17
这是一个非常好的用例zip
.
>>> list1 = [1,2,3,4,5]
>>> list2 = [1,1,1,4,1]
>>> list3 = [1,22,3,1,5]
>>> list4 = [1,2,5,4,5]
>>> [sum(x) for x in zip(list1, list2, list3, list4)]
[4, 27, 12, 13, 16]
Run Code Online (Sandbox Code Playgroud)
或者如果您将数据作为列表列表而不是单独的列表:
>>> data = [[1,2,3,4,5], [1,1,1,4,1], [1,22,3,1,5], [1,2,5,4,5]]
>>> [sum(x) for x in zip(*data)]
[4, 27, 12, 13, 16]
Run Code Online (Sandbox Code Playgroud)
同样,如果将数据存储dict
为列表,则可以使用dict.itervalues()
或dict.values()
检索列表值并以类似的方式使用它:
>>> data = {"a":[1,2,3], "b":[3,4,4]}
>>> [sum(x) for x in zip(*data.itervalues())]
[4, 6, 7]
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的列表长度不等,zip
则可以使用最短列表长度.例如:
>>> data = [[1,2,3,4,5], [1,1], [1,22], [1,2,5]]
>>> [sum(x) for x in zip(*data)]
[4, 27]
Run Code Online (Sandbox Code Playgroud)
如果您希望获得包含所有数据的结果,您可以使用itertools.izip_longest
(使用适当的fillvalue
).例:
>>> data = [[1,2,3,4,5], [1,1], [1,22], [1,2,5]]
>>> [sum(x) for x in izip_longest(*data, fillvalue=0)]
[4, 27, 8, 4, 5]
Run Code Online (Sandbox Code Playgroud)
虽然@ Shawn的答案是正确的,但我认为这map
可能比列表理解更优雅:
>>> list1 = [1,2,3,4,5]
>>> list2 = [1,1,1,4,1]
>>> list3 = [1,22,3,1,5]
>>> list4 = [1,2,5,4,5]
>>> map(sum, zip(list1, list2, list3, list4))
[4, 27, 12, 13, 16]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
787 次 |
最近记录: |