Как правило, когда вы хотите перебрать часть списка в Python, проще всего просто разрезать список.
# Iterate over everything except the first item in a list
#
items = [1,2,3,4]
iterrange = (x for x in items[1:])
Но оператор среза создает новый список, что во многих случаях даже не нужно делать. В идеале мне нужна какая-то функция нарезки, которая создает генераторы, а не новые объекты списка. Нечто подобное можно было бы сделать, создав выражение генератора, которое использует range
для возврата только определенных частей списка :
# Create a generator expression that returns everything except
# the first item in the list
#
iterrange = (x for x, idx in zip(items, range(0, len(items))) if idx != 0)
. Но это как-то хлопотно. Мне интересно, есть ли лучший, более элегантный способ сделать это. Итак, как проще всего разрезать список так, чтобы вместо нового объекта списка создавалось выражение генератора?