一段时间以来,我一直在思考Python中的几个函数,并且能够定义替换其职责的函数。我的问题是,默认功能是效率最高的,还是我应该尝试构建效率更高的功能?
例如,我已经重做list.reverse()
def reverse(lst):
for i in range(len(lst) - 1, -1, -1):
lst.append(lst.pop(i))
此方法有效。该列表已排序。但这在效率或使用的内存方面比list.reverse()
好吗?
答案 0 :(得分:4)
定时-您的速度慢了一个数量级:
import time
def reverse(lst):
for i in range(len(lst) - 1, -1, -1):
lst.append(lst.pop(i))
thelist = ["Hello World","Something","Element"]
start = time.time()
for x in range(0,1000000):
reverse(thelist)
print(time.time()-start)
start = time.time()
for x in range(0,1000000):
thelist.reverse()
print(time.time()-start)
输出:
1.0335352420806885
0.11595964431762695
答案 1 :(得分:3)
reverse()
用C实现,比您的实现快得多。大多数python函数的设计都非常智能,它们可能是最有效的,以维护其所需的功能。如果您愿意做出贡献,可以去CPython github page并尝试改进一些代码。
PyList_Reverse(PyObject *v)
{
PyListObject *self = (PyListObject *)v;
if (v == NULL || !PyList_Check(v)) {
PyErr_BadInternalCall();
return -1;
}
if (Py_SIZE(self) > 1)
reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
return 0;
仅供参考:reverse()
的更简单的python实现就是切片
def reverse(x):
return x[::-1]