如何以最有效的方式在Python中转换列表

2024-05-12 19:45:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有这个列表

a=  [[1,2,3,4],
     [2,4,5,1],
     [3,4,6,2],
     [2,3,4,5]]

并希望将列表读数水平转为垂直。在

^{pr2}$

最好的方法是什么?最有效的方法是什么?我对编程很陌生,很抱歉我是个笨蛋。谢谢。在


Tags: 方法列表编程水平笨蛋读数pr2陌生
3条回答

查看numpy库。您可以将列表放入数组中,然后按如下方式进行转置:

a = array ([[1,2,3,4],
       [2,4,5,1],
       [3,4,6,2],
       [2,3,4,5]])
a.transpose()

注:解释Tadeck的解是很容易的。zip具有以下签名:

zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

所以,它需要一些序列(我们不知道确切有多少),然后按照以下顺序构建元组:获取每个序列的第一个元素,将它们放入元组,然后将每个序列的第二个元素放入第二个元组,依此类推。它返回在执行期间生成的所有元组的列表。在

实际上,*lst-是参数列表的解包。您可以在following note中阅读更多有关它的信息。在

我希望,现在每个人都能理解这段代码是如何工作的。:)

你问的是效率问题。你可以用timeit来做这个。在

>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

对于[[1,2,3,4],[2,4,5,1],[3,4,6,2],[2,3,4,5]]*1000000的大数据集

^{pr2}$

如果列表的长度不同,zip将截断为最短的长度。您可以使用'map'或itertools.izip_longest来用None来填充缺少的值。在

你可以这样做:

zip(*your_list)

证明:

^{pr2}$

相关问题 更多 >