检查对象(具有某些属性值)是否不在列表中

时间:2016-02-29 08:09:37

标签: python python-2.7

我是Python新手。我使用的是Python v2.7。

我定义了一个简单的类Product

class Product:
    def __init__(self, price, height, width):
        self.price = price
        self.height = height
        self.width = width

然后,我创建了一个列表,然后附加了一个Product对象:

# empty list
prod_list = []
# append a product to the list, all properties have value 3
prod1 = Product(3,3,3)
prod_list.append(prod1)

然后,我创建了另一个Product对象,该对象设置了相同的初始值(全部为3):

prod2 = Product(3,3,3)

然后,我想检查prod_list 是否包含价格= 3,宽度= 3&的Product对象。身高= 3,由:

if prod2 not in prod_list:
   print("no product in list has price=3, width=3 & height=3")

我希望没有打印输出消息,但会打印出来。在Python中,如何检查列表是否没有具有某些属性值的对象呢?

1 个答案:

答案 0 :(得分:7)

您需要为对象添加let verticalSpace = NSLayoutConstraint(item: image, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0) view.addConstraint(verticalSpace) // this works 属性。为了获取对象属性,您可以将属性名称传递给equality,后者返回获取属性的元组,然后您可以比较元组。您还可以使用operator.attrgetter属性,它将模块的命名空间作为字典对象。然后,您可以获取要根据它们比较对象的属性名称。

__dict__

编辑:

正如@Ashwini在评论中提到的基于python wiki:

  

比较运营商之间没有隐含的关系。该   from operator import attrgetter class Product: def __init__(self, price, height, width): self.price = price self.height = height self.width = width def __eq__(self, val): attrs = ('width', 'price', 'height') return attrgetter(*attrs)(self) == attrgetter(*attrs)(val) def __ne__(self, val): attrs = ('width', 'price', 'height') return attrgetter(*attrs)(self) != attrgetter(*attrs)(val) 的真相并不意味着x==y是假的。因此,何时   定义x!=y,还应定义__eq__()以便{。}}   运营商将按预期行事。

因此,作为一种更全面的方式,我还在对象中添加了__ne__()属性。如果其中一个属性不等于它在其他对象中的相对属性,则返回True。

演示:

__ne__
相关问题