python如何基于对象的数据成员删除列表中的对象
所以我在下面创建了一个类,并将它的实例存储在一个列表中python如何基于对象的数据成员删除列表中的对象,python,Python,所以我在下面创建了一个类,并将它的实例存储在一个列表中 class Word: def __init__(self,word,definition,synonyms): self.w=word self.defi=definition self.synonyms=synonyms 我确信我可以遍历列表并检查每个实例,但我正在尝试使用列表的remove方法来完成这项工作。 x是Word对象的列表 word="hi" x.remove(Wor
class Word:
def __init__(self,word,definition,synonyms):
self.w=word
self.defi=definition
self.synonyms=synonyms
我确信我可以遍历列表并检查每个实例,但我正在尝试使用列表的remove方法来完成这项工作。
x是Word对象的列表
word="hi"
x.remove(Word if Word.w==word)
这给了我一个错误。那么有没有类似的方法呢
编辑
我试图简化我的问题,但显然我的意图并不明确。
我有一本字典,它的键是单词的最后两个字母(用户添加的),它的值是包含最后两个字符的单词列表。例如:
w1=Word("lengthen","make something taller","some synonym")
w2=Word("woken","let someone wake up","some synonym")
w3=Word("fax","machine used for communication","some synonym")
w4=Word("wax","chemical substance","some synonym")
['en':(w1,w2),'ax':(w3,w4)]
我试图定义一个delete方法,它使用字典和一个单词(字符串),然后它将删除包含以下单词的对象单词
def delete(dictionary,word):
if word[-2:] in dictionary:
x=dictionary[word[-2:]]
if(x.count(word)!=0):
x.remove(Word if Word.w==word)
通常,您会使用列表理解来构建一个没有匹配项的新列表,否则您会在迭代列表时尝试修改列表:
x = [word for word in x if word.w != "hi"]
注意小写的单词
;使用Word
对类本身进行阴影处理
如果就地更改列表至关重要,可以使用切片:
x[:] = [word for word in x if word.w != "hi"]
通常,您会使用列表理解来构建一个没有匹配项的新列表,否则您会在迭代列表时尝试修改列表:
x = [word for word in x if word.w != "hi"]
注意小写的单词
;使用Word
对类本身进行阴影处理
如果就地更改列表至关重要,可以使用切片:
x[:] = [word for word in x if word.w != "hi"]
我想这会满足你的要求:
class Word:
def __init__(self,word,definition,synonyms):
self.w=word
self.defi=definition
self.synonyms=synonyms
def __repr__(self): # added to facilitate printing of tuples of Word objects
return 'Word({}, {}, {})'.format(self.w, self.defi, self.synonyms)
w1=Word("lengthen", "make something taller", "some synonym")
w2=Word("woken", "let someone wake up", "some synonym")
w3=Word("fax", "machine used for communication", "some synonym")
w4=Word("wax", "chemical substance", "some synonym")
dictionary = {'en': (w1, w2), 'ax': (w3, w4)}
def delete(dictionary, word):
suffix = word[-2:]
if suffix in dictionary:
dictionary[suffix] = tuple(word_obj for word_obj in dictionary[suffix]
if word_obj.w != word)
delete(dictionary, 'woken')
print(dictionary)
我想这会满足你的要求:
class Word:
def __init__(self,word,definition,synonyms):
self.w=word
self.defi=definition
self.synonyms=synonyms
def __repr__(self): # added to facilitate printing of tuples of Word objects
return 'Word({}, {}, {})'.format(self.w, self.defi, self.synonyms)
w1=Word("lengthen", "make something taller", "some synonym")
w2=Word("woken", "let someone wake up", "some synonym")
w3=Word("fax", "machine used for communication", "some synonym")
w4=Word("wax", "chemical substance", "some synonym")
dictionary = {'en': (w1, w2), 'ax': (w3, w4)}
def delete(dictionary, word):
suffix = word[-2:]
if suffix in dictionary:
dictionary[suffix] = tuple(word_obj for word_obj in dictionary[suffix]
if word_obj.w != word)
delete(dictionary, 'woken')
print(dictionary)
由于
list.remove
可以正常工作,您可能需要执行x[:]=[如果word.w!=“hi”]
。这将使列表对象保持不变。嗨,我想你误解了我,请检查我的编辑并感谢:)@RoudyTarabay这很好,使用x[:]
版本,它将替换字典中的列表。由于list.remove
工作正常,你可能需要执行x[:]=[如果word.w!=“hi”
。这将保持列表对象不变。嗨,我想你误解了我,请检查我的编辑并感谢:)@RoudyTarabay很好,使用x[:]
版本,它将替换字典中的列表。原因之一remove()
不起作用,因为字典中的值是tuple
s,而不是list
s,tuple没有remove()
方法,因为它们是不可变的。您需要更改值的类型,或者用新的元组对象替换现有值。一个原因是remove()
不适用于您尝试执行的操作,因为字典中的值是tuple
s,而不是list
s,并且元组没有remove()
方法,因为它们是不可变的。您需要更改值的类型或使用新的元组对象替换现有值。