Python检查对象列表中元素的存在

时间:2013-08-18 17:35:58

标签: python

我有一个python对象列表。例如“all_names” 我可以用这种方式从该列表中检索值:

for a in all_names:
    print a.name,a.age

我的目标是快速查明列表all_names中是否存在某个名称。

所以我这样做。

all = []
for a in all_names:
    all.append(a.name)
if "any_name" in all:
    print "Name exit"
else:
    print "Not found"

但是如果“all_names”的大小非常大(例如,如果len(all_names)> 100,000),那么我认为这不是一种有效的方法。

所以想知道,如果有更有效的方式吗?

感谢Adv。

4 个答案:

答案 0 :(得分:1)

尝试:

if any(i.name == "any_name" for i in all_names):
    print "Name exists"
else:
    print "Not found"

如果您只需要找一次名字,就可以了。如果您需要查找更多名称 - 请使用set

names = set(i.name for i in all_names)
if "any_name" in names:
    print "Name exists"
else:
    print "Not found"

答案 1 :(得分:0)

这个怎么样:

for i in all_names:
    if i.name == "any_name":
        print("Name found!")
        break
else:
    # The loop wasn't broken out of
    print("Name not found")

可替换地:

if any(i.name == "any_name" for i in all_names):
    print("Name found!")
else:
    print("Name not found")

答案 2 :(得分:0)

使用一套。

all_set = set(a.name for a in all_names)

if "any_name" in all_set:
    print "Name exists"
else:
    print "Not found"

该集合的工作方式类似于字典,具有O(1)访问时间。当然要欣赏集合的速度,你需要重用它(在同一组上要求几个名字)。

答案 3 :(得分:0)

创建all_name作为
all_name={a.name for a in all_names}
在你的代码中,一切都很好..


注意:请勿使用保留的内置插件(在您的情况下为all)名称