gpt4 book ai didi

python - 在 Python 中重构 For 循环

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:25 25 4
gpt4 key购买 nike

我目前正在开发一个 iTunes 数据程序,该程序不断循环浏览用户的图书馆,以获取有关某个图书馆的统计信息。返回我有一些这样的代码片段:

def numArtist(self):
num = 0
for song in self.allSongs:
tempList = []
if song.artist not in tempList:
tempList.append(song.artist)
num += 1
return num

def getAlbumNames(self):
albums = []
for song in self.allSongs:
if song.album not in albums:
albums.append(song.album)
return albums

重复主要 for 循环体的地方:

  for song in self.allSongs: # same for-loop condition
# different for-loop body

有没有办法重构像这样的方法,我有相同的 for 循环条件但主体定义不同?

我有很多方法都使用相同的 for 循环,所以我想找到一种方法来降低代码的复杂性和冗余。


仅供引用,所有 Song 对象都有我用来获取数据的属性 - 艺术家、专辑(名称)、流派等。

最佳答案

使用set comprehensionslen 来简化它们中的每一个:

def numArtist(self):
return len({song.artist for song in self.allSongs})

def getAlbumNames(self):
return {song.album for song in self.allSongs}

为了让它更通用,您可以编写一个方法,它接受 lambda并使用它来过滤每首歌曲的属性:

def uniqueProps(self, fxn):
return {fxn(song) for song in self.allSongs}

def getAlbumNames(self):
return self.uniqueProps(lambda song: song.album)

关于python - 在 Python 中重构 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40695241/

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