Список [i: j] гарантированно является пустым списком, если список [j] предшествует списку [i]?
Учебник Python объясняет поведение среза, когда индексы отрицательны, но я не могу найти документацию, описывающую поведение, когда индекс конца предшествует начальный индекс. (Я также рассмотрел Объяснение ноты фрагмента Python, и, возможно, я недостаточно читаю, но ответы там, похоже, не затрагивают этот вопрос.)
Поведение, которое я наблюдаю, это то, что возвращается пустой список, что кажется мне разумным. Однако мне также представляется разумным, чтобы это возвращало список элементов между i
и j
в обратном порядке или просто вызывало исключение.
Является list[i:j]
гарантированным пустым списком, если list[j]
предшествует list[i]
?
Ответы
Ответ 1
Да, если j <= i
- true, результирующий фрагмент пуст для стандартных типов Python. Чтобы получить результаты в обратном порядке, вам нужно добавить отрицательный шаг:
list[i:j:-1]
потому что явный лучше, чем неявный.
Это описано в разделе Общие операции последовательности, сноска 4:
Срез s от я до j определяется как последовательность элементов с индексом k, такая что i <= k < j
. Если я или j больше, чем len(s)
, используйте len(s)
. Если я опущено или None
, используйте 0
. Если j
опущено или None
, используйте len(s)
. Если я больше или равно j, срез пуст.
Смелый акцент мой.
Пользовательские типы могут свободно интерпретировать это по-другому.