你有没有一个很好的方法来计算我的Sugar
中的goblet
个数?
class Sugar:pass
class Milk:pass
class Coffee:pass
goblet = [Sugar(), Sugar(), Milk(), Coffee()]
sugar_dosage = goblet.count(Sugar) #Doesn't work
最佳答案
您可以将agenerator expression与sum
和isinstance
一起使用:
sum(isinstance(x, Sugar) for x in goblet)
# or
sum(1 for x in goblet if isinstance(x, Sugar))
此外,
list.count
也不起作用,因为该方法正在测试列表中有多少项等于Sugar
换句话说,它基本上是对列表中的每一项执行item==Sugar
。这是不正确的,因为您要测试每个项的类型,这就是isinstance
所做的。