class MySong:
_songTitle = "Song Title"
_artistName = "Artist Name"
_likeIndicator = -1
def setTitleAndArtist(self, songTitle, artistName):
self._songTitle = songTitle
self._artistName = artistName
def setLike(self, likeIndicator):
self._likeIndicator = likeIndicator
def undoSetLike(self, songTitle):
Null
def getTitle(self):
return self._songTitle
def getArtist(self):
return self._artistName
def getLikeIndicator(self):
return self._likeIndicator
class MyPlaylist:
_mySongs = []
def add(self, song):
self._mySongs.append(song)
def showTitles(self):
index = 0
titlesList = []
while index != len(self._mySongs):
titlesList.append(self._mySongs[index].getTitle())
index = index + 1
return titlesList
def remove(self):
remindex = 0
while remindex != len(self._mySongs):
if (self._mySongs[index].getTitle()) == remChoice :
return("Song FOUND debug!")
self._mySongs.remove(index)
else:
remindex = remindex + 1
return("Song NOT FOUND debug!")
def getMySong(self):
Null
_mySongs = []
内有一个歌曲对象列表。我试图根据该对象的title变量删除一个。
在程序的单独(未示出)部分中,要求用户输入要作为字符串删除的歌曲的标题。保存为remChoice
。
我不完全确定如何根据标题删除歌曲。 我已经尝试了一段时间才能实现它,显然我们通过将它与标题匹配(通过调用getTitle方法)找到列表中的歌曲索引,然后在找到它时删除该索引
这不起作用。我哪里错了?
答案 0 :(得分:0)
试
self._mySongs.remove(title)
这应该工作。
(或者来自另一个对象:用你的对象名称替换self)
答案 1 :(得分:0)
如果您要删除list知道其使用索引的项目:
del xs[i]
其中i
是索引。 (例如:您的歌曲基于您的搜索的索引)。
list.remove()
用于从列表中删除匹配元素,而不是" ith"项目
您可能还会发现list
不是合适的数据结构吗?也许您可以尝试在dict
中存储键/值对。 e.g:
my_songs = {}
my_aongs["My Song Title"] = MySong(title, description, length)
您可以稍后通过按键删除歌曲:
del my_songs["My Song Title"]
标题是你的钥匙。这使您无需进行O(n)搜索。
<强>更新强>
您的.remove()
方法应该更像以下内容:
def remove(self, title):
for i, song in enumerate(self._mySongs):
if song.getTitle() == title:
del self._mySongs[i]
return
print("Song not found!")
我们通过使用list
而不是使用while循环并进行手动记录来使用for x in xs:
的迭代协议。内置函数enumerate()
还用于为我们提供一个索引,我们将重复迭代(即:它在序列中的位置)。