我想比较一下列表,其中包含一些在中使用连词的类。下面的代码:
class Word:
def __init__(self, p_name):
self.name = p_name
def __eq__(self, other):
return self.name == other.name
def __str__(self):
return "_name_: " + self.name
t1 = []
t1.append(Word("John"))
t2 = []
t2.append(Word("John"))
if t1 in t2:
print("the same")
我得到一个错误,"列表没有属性‘name’"。我知道我可以写一些循环,但如果在这种情况下可能的话,我想使用连词。
这:
if t1 in t2:
print("the same")
应该是其中之一:
# Check if a single word is in t2.
w = Word("John")
if w in t2:
print("the same")
# Check if any element of t1 is in t2.
if any(w in t2 for w in t1):
print("the same")
# Check if all elements of t1 are in t2.
if all(w in t2 for w in t1):
print("the same")
您不应该检查一个列表是否在另一个列表中。您可以检查某个特定项目是否在列表中,也可以将t1
中的所有项目与t2
中的项目进行比较。
def __eq__(self, other):
return isinstance(other, Word) and self.name == other.name
在__eq__
中添加other
是Word
的检查也是一个好主意。因为other
是一个列表而不是Word
,所以您的代码会爆炸,因此other.name
查找失败。