>python -m timeit -s "a = [[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]]" "zip(*a)"
1000000 loops, best of 3: 0.569 usec per loop
>python -m timeit -s "a = [[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]]" "map(None, *a)"
1000000 loops, best of 3: 0.644 usec per loop
>python -m timeit -s "a = [[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]]" "[[row[i] for row in a] for i in xrange(len(a[0]))]"
1000000 loops, best of 3: 1.43 usec per loop
>python -m timeit -s "from numpy import array; a = array([[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]])" "a.transpose()"
1000000 loops, best of 3: 0.249 usec per loop
查看numpy库。您可以将列表放入数组中,然后按如下方式进行转置:
注:解释Tadeck的解是很容易的。
zip
具有以下签名:zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
所以,它需要一些序列(我们不知道确切有多少),然后按照以下顺序构建元组:获取每个序列的第一个元素,将它们放入元组,然后将每个序列的第二个元素放入第二个元组,依此类推。它返回在执行期间生成的所有元组的列表。在
实际上,
*lst
-是参数列表的解包。您可以在following note中阅读更多有关它的信息。在我希望,现在每个人都能理解这段代码是如何工作的。:)
你问的是效率问题。你可以用timeit来做这个。在
对于
^{pr2}$[[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]]*1000000
的大数据集如果列表的长度不同,
zip
将截断为最短的长度。您可以使用'map'或itertools.izip_longest
来用None
来填充缺少的值。在你可以这样做:
证明:
^{pr2}$相关问题 更多 >
编程相关推荐