Python

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

やりたいこと

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)]