Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能改进Python吗;s函数?_Python - Fatal编程技术网

你能改进Python吗;s函数?

你能改进Python吗;s函数?,python,Python,一段时间以来,我一直在考虑Python中的几个函数,并且能够定义替换它们的职责的函数。我的问题是,默认函数是最有效的,还是应该尝试构建更有效的函数 例如,我已经完成了list.reverse() def倒车档(lst): 对于范围内的i(len(lst)-1,-1,-1): 第一次追加(第一次pop(i)) 这种方法是有效的。列表已排序。但就效率或内存使用而言,它比list.reverse()好吗?你的速度慢了一个数量级: 导入时间 def倒档(lst): 对于范围内的i(len(lst)-1

一段时间以来,我一直在考虑Python中的几个函数,并且能够定义替换它们的职责的函数。我的问题是,默认函数是最有效的,还是应该尝试构建更有效的函数

例如,我已经完成了
list.reverse()

def倒车档(lst):
对于范围内的i(len(lst)-1,-1,-1):
第一次追加(第一次pop(i))

这种方法是有效的。列表已排序。但就效率或内存使用而言,它比list.reverse()好吗?

你的速度慢了一个数量级:

导入时间
def倒档(lst):
对于范围内的i(len(lst)-1,-1,-1):
第一次追加(第一次pop(i))
thelist=[“你好,世界”,“某物”,“元素”]
开始=时间。时间()
对于范围(01000000)内的x:
反向(列表)
打印(f“您的:{time.time()-start}”)
开始=时间。时间()
对于范围(01000000)内的x:
列表反向()
打印(f“他们的:{time.time()-start}”)
输出:

Yours: 1.0335352420806885
Theirs: 0.11595964431762695
不幸的是,你的速度实际上慢了很多,我认为这不会在长时间的计算中得到改善

--

编辑:

如果我们将@Alec_Alameddine的解决方案与您和Python的解决方案进行比较,我们会发现:

Yours: 1.5206882953643799
Alec's: 0.41818690299987793
Theirs: 0.20143365859985352
虽然Alec的速度明显快于您的,但Python的速度大约是您的两倍。因此,请坚持使用内置函数

reverse()
是用C实现的,这比您的实现要快得多。大多数python函数的设计都非常智能,并且为了维护它们所需的功能,它们可能是最高效的。如果您想对此有所贡献,可以转到CPython并尝试改进一些代码

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()

def reverse(x):
    return x[::-1]

你可以给它们计时,看看它们是如何叠加的。这可能比
list.reverse()
慢得多。Python中的一些函数是用C实现的。如果你重新实现它,除非基本的计算复杂度降低,例如从O(n)到O(logn),否则你不太可能改进它。您可以使用该模块比较运行时。但是请注意,大多数内置函数和方法都是用C语言实现的,并且经过了多次改进和优化。使用语言内置方法和函数总是一个好主意。它们在大多数情况下都是优化的。生成非常大的列表,并进行时间监控。