2016-07-15 3 views
-5

Что такое простой способ использовать zip сделать:Получить список кортежей соседей

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

Edit: да, общие решения Ngram похожи, но слишком многословным для такой простой задачи. См. Ответы ниже, чтобы узнать, почему.

+0

Каков ваш * текущий * способ сделать это? – jonrsharpe

+0

Другой связанный пост [Быстрая реализация символьных n-граммов с использованием 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 бессмысленен? 'tuple (zip (x [: - 1], x [1:]))' отлично. –

+0

@StevenSummers Я сейчас. – zephyr

Смежные вопросы