为什么count()在我的代码中没有按照我期望的方式工作?

时间:2009-12-22 03:48:09

标签: python django

class FriendshipManager(models.Manager):    
       def are_friends(self, user1, user2):
            if self.filter(from_user=user1, to_user=user2).count() > 0:
                return True
            if self.filter(from_user=user2, to_user=user1).count() > 0:
                return True
            return False

我找到了count() 所以我试试看, 但它运行错误

a=[1,2,3,4]
print a.count()

a='ssada'
print a.count()

为什么我的代码运行错误,但FriendshipManager可以运行,谢谢 请尝试使用代码而不是文本,因为我的英语不是很好,谢谢

4 个答案:

答案 0 :(得分:8)

这里的问题是你混淆了两个同名的方法。

在Python中的序列中,count()完全符合Dustin描述的“计算序列中参数出现次数。”

然而,您引用的代码来自Django模型。在那里,在过滤器对象上调用count()是SQL分组函数COUNT的别名,它总结了匹配行的数量。

从本质上讲,初始示例中的count和之后两个示例中的count根本不是同一种方法。

答案 1 :(得分:5)

如果您想确定列表的长度/大小,我想您想使用len(a)而不是a.count()a.count()实际上需要一个论证。它计算值的出现次数。例如:

a = [2, 6, 2, 1, 5, 3, 9, 5]
print a.count(5) #should display 2 because there are two elements with a value of 5
print a.count(3) #should display 1 because there is only one element with a value of 3

答案 2 :(得分:3)

对于那种情况,

len是正确的。

>>> a=[1,2,3,4]
>>> print len(a)
4

答案 3 :(得分:0)

我不确定这是否是正确答案,但是,请尝试使用此代替您拥有的模型管理器代码。这样的话没有大的变化。

class FriendshipManager(models.Manager):    
   def are_friends(self, user1, user2):
        if self.filter(from_user=user1, to_user=user2).count() or self.filter(from_user=user2, to_user=user1).count():
            return True
        return False

如果count()返回零以外的值,它将始终返回True。