Как правило, если вы хотите перебирать часть списка в 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)
Но это довольно громоздко. Мне интересно, есть ли лучший, более элегантный способ сделать это. Итак, какой самый простой способ разрезать список, чтобы вместо генерации было создано выражение генератора?