2013-04-23 65 views
2

我正在创建一个python程序。将列表变成一个元组python

我有一个列表:

[3, 28, 25, 126, 25, 127]

我怎样才能把它变成一个元组的列表,所以该列表变成:

[(3,28),(25,126),(25,127)]

它加入2个元素,使一元组。

+1

在问你的下一个问题之前,你应该做一些研究。如果那不能回答你的问题,那么在你问之前[尝试自己](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。 – Volatility 2013-04-23 07:29:18

回答

11
>>> L = [3, 28, 25, 126, 25, 127] 
>>> zip(L[0::2], L[1::2]) 
[(3, 28), (25, 126), (25, 127)] 

这产生两个列表切片,用2步宽 - 一个从索引从零开始,第二从索引开始1. zip然后创建与一个元件的元组每个迭代。

+0

请注意,这并不像我的解决方案那样高效,因为您正在制作两个浅度副本:P – jamylak 2013-04-23 07:39:09

+1

Seconding @jamylak,您不是创建迭代器,而是立即创建要被切片的子集的浅拷贝。尽管对于非常短的列表来说,这可能实际上来自最小化的函数调用(但是在那一点上,性能差异可以忽略不计),但是我看到类似迭代器与生成子集前期场景的几个月后,成为除了最短列表之外的最佳解决方案。 – Endophage 2013-04-23 07:42:21

7
>>> L = [3, 28, 25, 126, 25, 127] 
>>> zip(*[iter(L)]*2) 
[(3, 28), (25, 126), (25, 127)] 

How does zip(*[iter(s)]*n) work in Python?

+2

那个有点不透明。你能解释一下吗? – 2013-04-23 07:31:20

+1

@Kyle Strand:在文档中有很好的解释:http://docs.python.org/3.3/library/functions.html#z – 2013-04-23 07:32:51

+0

@KyleStrand还添加了一个链接到这个问题 – jamylak 2013-04-23 07:34:03

相关问题