2013-02-15 62 views
2

有一行表達實現以下目標:轉平列表分爲二元組

input = ['this', 'is', 'a', 'list'] 
output = [('this', 'is'), ('a', 'list')] 

我最初的想法是創建兩個列表,然後將拉鍊起來。這將需要三行。

該列表將具有偶數個元素。

+0

而如果您的列表有奇數個元素? – 2013-02-15 20:20:09

+0

你現在可以忽略它。 – David542 2013-02-15 20:20:19

+0

你原來的計劃很好。我敢肯定,你可以把它變成一條很醜的線。 – 2013-02-15 20:21:56

回答

7

這是很短:

zip(input, input[1:])[::2] 
+0

這個問題已被標記爲重複,但我還沒有看到這個答案:)我必須說我喜歡它... – piokuc 2013-02-15 20:27:21

+1

注意:不能在python3中工作。請參閱root的python3解決方案的答案。 – 00500005 2014-03-12 17:14:08

+0

有趣,謝謝。 – piokuc 2014-03-12 18:24:24

3
>>> input = ['this', 'is', 'a', 'list'] 

>>> [(input[i], input[i + 1]) for i in range(0, len(input), 2)] 
[('this', 'is'), ('a', 'list')] 
6
In [4]: zip(*[iter(lst)]*2) 
Out[4]: [('this', 'is'), ('a', 'list')] 
+2

這......受到啓發。 – 2013-07-30 11:26:49

+1

這樣做是否工作,因爲您將zip壓縮到同一個迭代器兩次,因此從「第一個列表」獲取第一個項目後,「第二個列表」中的第一個項目實際上是原始列表中的第二個項目? – flutefreak7 2015-05-07 20:00:30