← Все вопросы
Как перебрать список с конца — reversed() или срез [::-1]?
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).
Ваш ответ
Войдите, чтобы ответить на вопрос.