列表的处理时间较慢



为什么我的代码如此缓慢(效率低下)?我需要制作两种方法来记录处理给定大小的列表所需的时间。我有一个search_fastsearch_slow的方法。即使这两个搜索时间之间存在差异。 Search_fast仍然很慢。我想优化处理时间,而不是8.99038815498 search_fast65.0739619732 search_slow。这只需要几分之一秒。我能做什么?我将永远感激一些技巧,因为编码对我来说仍然是很新的。:)

from timeit import Timer

def fillList(l, n):
    l.extend(range(1, n + 1))
l = []
fillList(l, 100)
def search_fast(l):
    for item in l:
        if item == 10:
            return True
    return False
def search_slow(l):
    return_value = False
    for item in l:
        if item == 10: 
            return_value = True
    return return_value
t = Timer(lambda: search_fast(l))
print t.timeit()
t = Timer(lambda: search_slow(l))
print t.timeit()

最快的方法是使用 in 运算符,它测试序列中值的成员资格。

if value in some_container:
    …

参考: https://docs.python.org/3/reference/expressions.html#membership-test-operations

更新:此外,如果您经常需要测试成员资格,请考虑使用集而不是列表。
一些优点和缺点可以在这里找到:https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset<</p>

div class="one_answers">

在上面添加以下代码:

t = Timer(lambda: 10 in l)
print(t.timeit())

在我的系统上生成以下内容:

0.6166538814701169
3.884095008084452
0.29087270299795875
>>>

希望这有帮助。基本思想是利用底层C代码,而不是制作自己的Python代码。

我设法找出了导致代码缓慢的原因。通过extend而不是append添加到列表中是一个简单的错误。

def fillList(l, n):
    l.**append**(range(1, n + 1))
l = []
fillList(l, 100)

现在search_slow 3.91826605797打卡而不是65.0739619732。但我不知道为什么它会对性能产生如此大的影响。

相关内容

  • 没有找到相关文章

最新更新