小编use*_*970的帖子

Python - “in”语句搜索对象列表很慢

我希望有人能解释为什么搜索对象引用列表比搜索普通列表慢得多。这是使用python“in”关键字来搜索我认为以“C编译器”速度运行的。我认为列表只是一个对象引用(指针)数组,因此搜索应该非常快。这两个列表在内存中正好是 412236 字节。

普通列表(搜索需要 0.000 秒):

alist = ['a' for x in range(100000)]
if 'b' in alist:
    print("Found")
Run Code Online (Sandbox Code Playgroud)

对象引用列表(需要 0.469 !! 秒来搜索):

class Spam:
    pass
spamlist = [Spam() for x in range(100000)]
if Spam() in spamlist:
    print("Found")
Run Code Online (Sandbox Code Playgroud)


编辑:很明显,这与旧式类比新式类有更多的开销有关。我的脚本只有 400 个对象,现在可以轻松处理多达 10000 个对象,只需让我的所有类都继承自“对象”类。就在我以为我了解 Python 的时候!

我以前读过新式与旧式,但从未提到旧式类比新式类慢 100 倍。搜索特定实例的对象实例列表的最佳方法是什么?
1. 继续使用“in”语句,但要确保所有类都是新样式。
2. 使用“is”语句执行一些其他类型的搜索,例如:

[obj for obj in spamlist if obj is target]
Run Code Online (Sandbox Code Playgroud)

3.其他一些更Pythonic的方式?

python search list python-2.7

1
推荐指数
1
解决办法
3587
查看次数

标签 统计

list ×1

python ×1

python-2.7 ×1

search ×1