我有一个类,它将多项式表示为一个术语集合,其中每个术语都有一个系数和一个指数.我正在研究类的__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):