2016-07-15 127 views
-5

的元組的列表,什麼是使用zip做一個簡單的方法:獲取鄰居

Input: (1,2,3,4,5) 
Output: ((1,2),(2,3),(3,4),(4,5)) 

編輯:是的,一般的ngram解決方案是相似的,但過於冗長對於這樣一個簡單的任務。看到下面的答案,看看爲什麼。

+0

什麼做你*電流*的方式? – jonrsharpe

+0

另一個相關文章[快速實現字符n-gram使用python](http://stackoverflow.com/q/18658106/4099593) –

+0

ngram解決方案顯然是超級解決方案,但一些實現是字符串特定的沒有一個像以下那樣簡單。 – T3db0t

回答

6

zip元組與自己的尾巴:

>>> ł = (1,2,3,4,5) 
>>> zip(ł, ł[1:]) 
[(1, 2), (2, 3), (3, 4), (4, 5)] 
+1

你將需要一個顯式強制轉換爲元組或列表。 – zephyr

+0

這是我正在尋找/希望的答案。絕對優雅。是的,要嚴格地滿足這個問題,它必須作爲一個元組進行投射。 – T3db0t

+0

@zephyr不在Python2中 –

1

你可以使用列表理解或發電機表達初始化元組:

>>> x = (1, 2, 3 4, 5) 
>>> tuple((x[i], x[i+1]) for i in range(len(x)-1)) 
((1, 2), (2, 3), (3, 4), (4, 5)) 

或者用切片:

>>> tuple(x[i:i+2] for i in range(len(x)-1)) 
((1, 2), (2, 3), (3, 4), (4, 5)) 
+1

切片也可以用'x [i:i + 2]'代替'(x [i],x [i + 1])' – Delgan

0
in = (1, 2, 3, 4, 5) 
out = tuple([(in[i], in[i+1] for i in range(len(in) - 1)]) 
print(out) 

>> ((1, 2), (2, 3), (3, 4), (4, 5)) 
0

另一種可能性

x = (1,2,3,4,5) 
tuple([(a,b) for a,b in zip(x[:-1],x[1:])]) 
+0

你確實意識到列表comp是沒有意義的嗎? '元組(zip(x [: - 1],x [1:]))''很好。 –

+0

@StevenSummers我現在做。 – zephyr