Как перебрать фрагмент? - PullRequest
0 голосов
/ 01 марта 2019

A slice в питоне не повторяется.Этот код:

s = slice(1, 10, 2)
iter(s)

приводит к этой ошибке:

TypeError: 'slice' object is not iterable

Это код, который я придумал, чтобы показать фрагмент, создав итерируемый список:

list(range(s.start, s.stop, s.step))

При этом используются атрибуты start, stop и step объекта среза.Я включаю их в диапазон (тип неизменяемой последовательности) и создаю список:

[1, 3, 5, 7, 9]

Чего-то не хватает?Могу ли я перебрать фрагмент лучше?

1 Ответ

0 голосов
/ 01 марта 2019

A slice не повторяется.Он не содержит элементов, но вместо этого указывает, какие элементы в некоторой другой итерации должны быть возвращены, если срез применяется к этой итерации.

Поскольку это не итерация, вы не можете выполнить итерацию по нему.Однако, как вы обнаружили, вы можете получить индексы, для которых он будет возвращать элементы из итерируемого объекта, к которому он применяется, используя range() - и вы можете выполнить итерацию:

s = slice(1, 10, 2)
indices = range(s.start, s.stop, s.step)
it = iter(indices)

>>> list(it)
[1, 3, 5, 7, 9]
...