我不记得我是不是在做梦,但我似乎记得有一个功能可以让我这样做,
foo in iter_attr(array of python objects, attribute name)
我查看了文档,但这种事情不属于任何明显列出的标题
答:使用列表推导会构建一个临时列表,如果搜索的序列很大,它可能会占用你所有的内存。即使序列不大,构建列表意味着在in开始搜索之前迭代整个序列。
通过使用生成器表达式可以避免临时列表:
foo = 12 foo in (obj.id for obj in bar)
现在,只要obj.id == 12接近开始bar,搜索就会很快,即使bar是无限长。
正如@Matt建议的那样,hasattr如果任何一个对象bar都缺少一个id属性,那么使用它是个好主意:
foo = 12 foo in (obj.id for obj in bar if hasattr(obj, 'id'))



