2010-05-13 153 views
3

說我有一個看起來像這樣的列表:我應該如何從Python中的列表中獲取對?

['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10'] 

使用Python,我怎麼會搶從中對,其中每個項目包括與之前和之後該項目一對?

['item1', 'item2'] 
['item2', 'item3'] 
['item3', 'item4'] 
['item4', 'item5'] 
['item5', 'item6'] 
['item6', 'item7'] 
['item7', 'item8'] 
['item8', 'item9'] 
['item9', 'item10'] 

看起來像我可以在一起的東西,但我想知道如果有人有一個優雅的解決方案,他們以前用過?

+0

可能重複的[Python:循環遍歷列表的最後一項](http://stackoverflow.com/questions/914715/python-looping-through-all-but-the-last-item-of -a-list) – tzot 2010-06-14 06:47:48

回答

11

這樣做會是這樣的一個快速和簡單的方法:

a = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10'] 

print zip(a, a[1:]) 

將產生如下:

[('item1', 'item2'), ('item2', 'item3'), ('item3', 'item4'), ('item4', 'item5'), ('item5', 'item6'), ('item6', 'item7'), ('item7', 'item8'), ('item8', 'item9'), ('item9', 'item10')] 
+0

比列表理解更緊湊。我從來沒有見過拉鍊。 – supersighs 2010-05-13 20:10:50

+0

非常好。我沒有意識到zip會有效地減少這樣的列表。 – 2010-05-13 20:29:34

1

這應該做的伎倆:

[(foo[i], foo[i+1]) for i in xrange(len(foo) - 1)] 
+0

確實如此,bravo!我知道有一件事我可以用列表理解來做,但是不知道如何處理它。謝謝! – supersighs 2010-05-13 20:06:53

+0

這產生的元組沒有列出,因爲OP詢問 – joaquin 2010-05-13 20:13:03

+0

OP實際上只是要求配對,但是如果你想要一個列表而不是元組,你只需要改成'[foo [i],foo [i + 1]]'在理解中。 – 2010-05-13 20:25:58

相關問題