Pythonic方式做`如果x在y中x.attr == val`?

我有一个类,它将多项式表示为一个术语集合,其中每个术语都有一个系数和一个指数.我正在研究类的__add__方法,我想知道最有效的方法是什么:

def __add__(self, other):
    new_terms = []
    for term in self.terms:
        if there is a term in other with an exponent == term.exponent
            new_terms.append(Term(term.coef + other_term.coef, term.exponent))

让我感到震惊的是我正在寻找以下内容:

if x in y where x.attr == val

或者在我的具体情况中:

if x in other where x.exponent == term.exponent

这样的事情存在吗?

最佳答案 在进行包含检查之前,您需要过滤列表.正如tobias_k建议的那样,您可以构建一个新列表,例如

[x for x in other if x.exponent == term.exponent]

这直接在if语句中起作用,因为空列表为False:

if [x for x in other if x.exponent == term.exponent]:

但是这做了一些浪费的工作,因为它a)必须构建一个新的列表,并且b)一旦找到结果就不会短路.更好的是在生成器表达式中使用相同的语法:

(True for x in other if x.exponent == term.exponent)

然后,您可以在if语句中使用它,但不会浪费任何工作:

if next((True for x in other if x.exponent == term.exponent), False):
点赞