Python如果Statement没有找到值

时间:2012-11-28 22:11:58

标签: python if-statement boolean

我构建了自己的类User,其属性为userID。我覆盖了__repr__,因此它是userID字符串。

在另一个类中,我有一个数组self.users = [],其中有几个User个实例。出于测试目的,我给了他们用户ID 1和2.我使用:

'[%s]' % ','.join(map(str, self.users))

要打印数组的内容,请生成:

[1,2]

我试图按照以下方式做出if语句:

if "1" in self.users:
  print "True"

以上是我想要实现的目标的简单表示。我已经尝试了很多方法,我无法让程序打印出来。有谁知道怎么做?

3 个答案:

答案 0 :(得分:3)

你想要:

if any("1" in str(x) for x in self.users):
   print "True"

可能更好的是:

if any("1" == x.userID for x in self.users):
   print True

如果我正确地阅读你的帖子。


最后,根据User的API,您可以在相等测试中使用ID

class User(object):
    def __eq__(self,other):
       return self.userID == other
   #other methods here

现在,您可以在列表中使用__contains__in),就像您最初尝试的那样:

if "1" in self.users:
   print "True"

答案 1 :(得分:2)

"1" in self.users检查字符串"1"是否在列表self.users中。您正在尝试检查是否存在字符串表示为"1"的用户,因此您可以尝试这样的操作:

if '1' in map(str, self.users):
    print 'True

另外,我会在您的班级定义中将__repr__更改为__str__

__repr__通常返回一个可以eval()回到原始对象的字符串,而__str__返回一个人类可读的对象表示。你正在做后者,所以我建议你使用__str__而不是__repr__

我也读过这个问题:Difference between __str__ and __repr__ in Python

答案 2 :(得分:0)

从您的问题定义中,听起来您正试图找到您的userID属性为“1”的用户。

您的__repr__函数碰巧使用userID作为表示确实意味着这是搜索它的最佳方式。为什么不呢?

if any(user.userID == '1' for user in self.users):
    print "True"

如果您确实需要搜索字符串表示,当然,请使用mgilson或Blender发布的答案(并找出您想要的strrepr中的哪一个)。但如果没有必要,不要这样做。