Python 检查属性是否等于任何对象列表中的特定字符串
每个对象都有一个属性Python 检查属性是否等于任何对象列表中的特定字符串,python,Python,每个对象都有一个属性名称。我想检查这些对象的name属性中是否包含特定字符串 [,] 执行此操作最有效的方法是什么?如果只需要检查一次,则可以尝试使用in运算符和生成器表达式 if "pizza" in (ball.name for ball in balls): ... 如果您要检查几次,您可以提前准备一套/记录: balls_names = set(ball.name for ball in balls) #build a dict if you want to use the ball
名称
。我想检查这些对象的name
属性中是否包含特定字符串
[,]
执行此操作最有效的方法是什么?如果只需要检查一次,则可以尝试使用in运算符和生成器表达式
if "pizza" in (ball.name for ball in balls): ...
如果您要检查几次,您可以提前准备一套/记录:
balls_names = set(ball.name for ball in balls) #build a dict if you want to use the ball after it is found...
#much later in the code...
if "pizza" in balls: ...
后一种方法将占用更多内存,但速度更快,因为它是O(1)查找其他答案将使用您已经使用的轨迹(“任意”)为您提供答案。如果您想知道在哪个球对象中找到特定名称,可以使用:
bouncyballs = [<bouncy.ball object at 0x7fdf8649ef10>, <bouncy.ball object at 0x7fdf863616d0>, < bouncy.ball object at 0x7fdf863616d0>]
C = 'string'
nameFound = False
for ball in bouncyballs:
if ball.name == C:
# Do what you like
print('%s is in %s!' % (C, ball['name']))
nameFound = True
print(nameFound)
bouncyballs=[,]
C='string'
nameFound=False
对于反弹球中的球:
如果ball.name==C:
#做你喜欢做的事
打印('%s在%s!'中!'%(C,ball['name']))
nameFound=True
打印(找到姓名)
我认为您使用any
和生成器表达式是正确的
>>> class A:
... def __init__(self,name):
... self.name = name
...
>>> a=A('bob')
>>> b=A('mike')
>>> c=A('lelsley')
>>> l=[a,b,c]
>>> any('mike' in x.name for x in l)
True
>>> any('xyz' in x.name for x in l)
False
您已经尝试了什么?我尝试了以下操作:
如果有的话(x.name==“C”代表实例[1]中的x)。bouncyballs)
,其中bouncyballs
是列表,C是我试图匹配的字符串。您可以编辑问题并将代码放入其中。这更容易理解:)看起来不错。有什么问题吗?谢谢。是的,我需要检查数百个弹跳球的名称。这就是为什么我要求最有效的方法。@natab-请注意,如果添加或删除了球,您必须更新容器。在任何情况下,您都不希望每次都构建set/dict