Что «лучше» обратного метода или перевернутой встроенной функции?

Что обычно рассматривается как больше Pythonic / лучше / быстрее использовать, обратный метод или обратная встроенная функция?

Оба действия:

_list = list(xrange(4)) print _list rlist = list(reversed(_list)) print rlist _list.reverse() print _list 

Зависит от того, хотите ли вы перевернуть список на месте (т. Е. Изменить список) или нет. Никакой другой реальной разницы.

Часто использование reversed ведет к более приятному коду.

foo.reverse() фактически меняет элементы в контейнере. reversed() фактически ничего не отменяет, он просто возвращает объект, который можно использовать для итерации по элементам контейнера в обратном порядке. Если это то, что вам нужно, это часто быстрее, чем наоборот.

Кажется, что есть большая разница. Я действительно думал, что все наоборот. Почему переупорядочивание значений в списке происходит быстрее, чем создание нового из итератора?

 from decorators import bench _list = range(10 ** 6) @ bench def foo():  list(reversed(_list)) @ bench def bar():  _list.reverse() foo() bar() print foo.time print bar.time 

+0,167278051376
+0,0122621059418

Не зная реальной статистики о производительности, _list.reverse() изменяет сам список, тогда как reversed(_list) возвращает итератор, готовый пересечь список в обратном порядке. Это большая разница.

Если это не проблема, object.reverse() кажется мне более читаемым, но, возможно, у вас есть конкретные требования к скорости. И если reverse() не принадлежит 80% программного обеспечения, которое потребляет ресурсы, я бы не стал беспокоиться (как общее правило).