查找字符串是否与Python中该类型对象列表中的对象属性值匹配的最短方法

时间:2009-12-28 13:33:53

标签: algorithm python

我有一个包含x类型对象的列表。这些对象具有属性名称。 我想找到一个字符串是否匹配任何这些对象名称。如果我有一个包含对象名称的列表,我会做if string in list,所以我想知道当前的情况是否有办法这样做而不必循环遍历列表。

5 个答案:

答案 0 :(得分:5)

any(obj for obj in objs if obj.name==name)

请注意,它会在找到第一个匹配后停止循环。

答案 1 :(得分:4)

这是另一个

dict( (o.name,o) for o in obj_list )[name]

但诀窍是避免首先创建列表obj_list

既然您知道要按属性的字符串值获取对象,请不要使用列表,而是使用字典而不是列表。

字典可以通过“搜索”来匹配字符串。这是一个比列表更好的选择。

答案 2 :(得分:4)

如果字符串匹配,您想要做什么?您只想返回True / False,还是返回匹配的对象列表? 要返回布尔值:

any(obj.name == name for obj in objs)

(我觉得这比Denis Otkidach的版本更具可读性。)

过滤列表:

[obj for obj in objs if obj.name == name]

答案 3 :(得分:1)

如果[x.name for x in list_of_x]中的字符串

答案 4 :(得分:0)

for i in listOfItemsOfTypeX:
    if i.name == myString: return True
return False