gpt4 book ai didi

python - 在 python 中“合并”两个对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:32 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何将两个对象“合并”在一起。我的目标是合并两个 Album 对象(代码如下)。我需要能够合并多个 Album 对象的 tracks 参数(列表),前提是 Album 的“title”参数> 对象相同。

基本上,如果我有一个 Album 对象,其中 tracks 参数的长度为 1,而另一个专辑对象其中 tracks 的长度> 参数也是 1,新的或更新的单数 Album 对象需要有一个长度为 2 的 tracks 参数。

我已经发布了我的代码来展示对象是如何定义的。

提前致谢!

编辑:由于 tracks 参数列表中的每个元素都是歌曲的名称,我想保留相同的元素并将它们放在新的或更新的 tracks 参数中.不仅仅是改变元素的数量,我需要将每个对象的确切元素放入这个"new"对象中。

class Album(object) :
def __init__(self, artist, title, tracks = None) :
tracks = []
self.artist = artist
self.title = title
self.tracks = tracks

def add_track(self, track) :
self.track = track
(self.tracks).append(track)
print "The track %s was added." % (track)

def __str__(self) :
if len(self.tracks) == 1 :
return "Artist: %s, Album: %s [" % (self.artist, self.title) + "1 Track]"
return "Artist: %s, Album: %s [" % (self.artist, self.title) + str(len(self.tracks)) + " Tracks]"

最佳答案

合并算法必须知道类的内部数据结构。因此,将合并代码放在类中似乎是合乎逻辑的。下面的代码执行此操作并允许合并两个相册,只需添加它们 (album1 + album2):

class Album(object) :
def __init__(self, artist, title, tracks = None) :
self.artist = artist
self.title = title
self.tracks = tracks

def add_track(self, track) :
self.track = track
(self.tracks).append(track)
print "The track %s was added." % (track)

def __str__(self) :
if len(self.tracks) == 1 :
return "Artist: %s, Album: %s [" % (self.artist, self.title) + "1 Track]"
return "Artist: %s, Album: %s [" % (self.artist, self.title) + str(len(self.tracks)) + " Tracks]"

def __add__(self, other):
if self.artist != other.artist or self.title != other.title:
raise ValueError("Albums are incommensurable")
return Album(self.artist, self.title, self.tracks + other.tracks)

用法如下:

>>> a = Album('Joe', "Joe's First", tracks=['Beer', 'Trucks'])
>>> b = Album('Joe', "Joe's First", tracks=['Bourbon', 'Tequila'])
>>> complete = a + b
>>> print complete
Artist: Joe, Album: Joe's First [4 Tracks]
>>> complete.tracks
['Beer', 'Trucks', 'Bourbon', 'Tequila']

关于python - 在 python 中“合并”两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com