← Все вопросы

Как перебрать список с конца — reversed() или срез [::-1]?

Задан 6 месяцев назад524 просмотров2 ответа
14

Нужно пройти по списку в цикле от последнего элемента к первому. Видел два варианта: for x in reversed(a) и for x in a[::-1]. В чём разница и что лучше использовать?

2 ответа

27
✓ Принятый ответ — помог автору

Оба перебирают список в обратном порядке, но работают по-разному.

a = [1, 2, 3, 4]
for x in reversed(a):
    print(x)   # 4 3 2 1

for x in a[::-1]:
    print(x)   # 4 3 2 1

Разница: a[::-1] создаёт новый список-копию в памяти, а reversed(a) возвращает ленивый итератор и ничего не копирует. На больших списках reversed() экономнее по памяти. Срез удобен, когда перевёрнутая копия нужна сама по себе (например, присвоить переменной). Для простого прохода в цикле бери reversed().

Ёжик Ежиков reversed работает с любой последовательностью, а ещё с range — reversed(range(10)) · 6 месяцев назад
Яна Герасимова Плюс reversed читается лучше, сразу понятно намерение · 6 месяцев назад
6

reversed(a).

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект