调用Lis中的对象

2024-06-09 16:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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变量。你知道吗

在程序的一个单独的(unshown)部分,要求用户输入他们想要删除的歌曲的标题作为字符串。这将另存为remChoice。你知道吗

我不完全确定如何删除基于标题的歌曲。 我已经尝试了一段时间,很明显,我们在列表中找到了歌曲的索引,方法是将其与标题匹配(通过调用getTitle方法),然后在找到索引时删除该索引。你知道吗

这不管用。我哪里出错了?你知道吗


Tags: self标题indexreturnsongdef歌曲class
2条回答

试试看 self._mySongs.remove(title) 这应该管用。 (或从另一个对象:用对象名替换self)

如果要从list中删除某个项,请使用:

del xs[i]

其中i是索引。(例如:基于搜索的歌曲索引)。你知道吗

list.remove()用于从列表中删除匹配的元素,而不是“ith”项。你知道吗

您可能还会发现list在这里不是合适的数据结构?也许您可以尝试将键/值对存储在dict中。e、 克:

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的迭代协议,使用的是for x in xs:,而不是使用while循环和手动记账。内置函数enumerate()也用来给我们一个索引到我们正在迭代的列表中(即:它在序列中的位置)。你知道吗

相关问题 更多 >