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