2017-01-18 8 views
0

У меня есть список L = [1,2,3,4,5,6], и мне нужно, чтобы получить пар следующим образом:Как читать два повторяющихся последующих значения из списка в Python?

[1,2] , [2,3], [3,4], [4,5], [5,6] 

Мое текущее решение создать два списка Полезность:

U1 = [1,2,3,4,5] 
U2 = [2,3,4,5,6] 

и использовать zip встроенную функцию, чтобы получить желаемый результат ,

Есть ли лучший способ добиться того же?

ответ

3

Это походит на ваше решение при помощи утилиты списки, но немного короче:

L = [1,2,3,4,5,6] 

for i in zip(L, L[1:]): 
    print(list(i)) 
# [1, 2] 
# [2, 3] 
# [3, 4] 
# [4, 5] 
# [5, 6] 

Это работает так, как ожидалось, потому что zip останавливается, как только один итерабель исчерпан.

Вы можете дополнительно использовать map для преобразования предметов немедленно:

for i in map(list, zip(L, L[1:])): 
    print(i) 

или если вы хотите, чтобы все это преобразуется в список списков:

list(map(list, zip(L, L[1:]))) 
# [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]] 

Если ваши списки действительно долгое создание нового списка (потому что я нарезал его [1:]) может быть дорогостоящим, тогда вы могли бы избежать этого, используя itertools.islice:

for i in zip(L, islice(L, 1, None)): 
    print(list(i)) 
1

Используйте список понимание:

[[L[i], L[i+1]] for i in range(len(L)-1)] 

Обычно список понимание будет намного быстрее, чем цикл в питона

+0

описаний списков являются ** обычно ** только быстрее при построении списков в итерации, однако не быстрее в случае итерации для других целей: http://stackoverflow.com/questions/22108488/are-list -comprehensions-и-функциональная-функция-быстрее, чем для петель –