我有一个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。
答案 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
)名称