Edited at

Python で iterator の次の値を取得しながら走査したい

More than 1 year has passed since last update.


やりたいこと

Ruby での

(1...10).each_cons(2).to_a

#=> [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9]]

を Python でやりたい。


方法 1

import itertools

numbers = range(1, 10)
it1, it2 = itertools.tee(numbers)
next(it2)
list(zip(it1, it2))
# [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]


方法 2

list や range など subscriptable (添え字にアクセス可能) なオブジェクトならこの方法がシンプルでした。(@shiracamus さん、ありがとうございます :bow:)

numbers = range(1, 10)

list(zip(numbers, numbers[1:]))
# [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]