2013-04-23 129 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

相關問題