反向方法或反向内置函数的"更好"是什么?

rec*_*gle 14 python methods reverse list built-in

什么通常被认为更Pythonic /更好/更快使用,反向方法或反向内置功能?

两者都在行动:

_list = list(xrange(4))

print _list

rlist = list(reversed(_list))

print rlist

_list.reverse()

print _list
Run Code Online (Sandbox Code Playgroud)

kin*_*all 33

foo.reverse()实际上是反转容器中的元素.reversed()实际上并没有反转任何东西,它只返回一个对象,可以用来以相反的顺序迭代容器的元素.如果这是你需要的,它通常比实际反转元素更快.


Nik*_*s R 11

似乎有很大的不同.我真的认为这是另一回事.为什么重新排列列表中的值比从迭代器创建新值更快?

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
Run Code Online (Sandbox Code Playgroud)

0.167278051376
0.0122621059418

  • 如果您对列表执行某些操作,则图片会更改.比较`for i in reverse(_list):...`和`_list.reverse();对于_ in _list:...`,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (2认同)

Kat*_*iel 9

取决于您是否要原地反转列表(即更改列表).没有其他真正的区别.

经常使用reversed导致更好的代码.