首页 > 解决方案 > 如何迭代命名元组列表,按键值过滤和分组,然后处理输出

问题描述

如何从这 3 个命名元组列表中获得所需的输出?

drumlist = [drums( title='99_drumtrack_1.wav', bpm='99'),
drums( title='95_drumtrack_2.wav', bpm='95'),
drums( title='93_drumtrack_3.wav', bpm='93'),
#etc...
]

melodylist = [melody( title='99_Abmin_melodytrack_1.wav', bpm='99', key='Abmin'),
melody( title='95_Bbmin_melodytrack_2.wav', bpm='95' ,key='Bbmin'),
melody(title='93_Fmaj_melodytrack_3.wav', bpm='93' , key='Fmaj'),
melody(title='92_Gmaj_melodytrack_4.wav', bpm='92' , key='Gmaj')
#etc...
]

basslist = [bass( title='99_Abmin_basstrack_1.wav', bpm='99', key='Abmin'),
bass(title='95_Bbmin_basstrack_2.wav', bpm='95', key='Bbmin'),
bass(title='93_Fmaj_basstrack_3.wav', bpm='93', key='Fmaj')
#etc...
]

#我想要的输出:

#interation 1
sound1 = 99_drumtrack_1.wav
sound2 = 99_Abmin_melodytrack_1.wav #KEYNOTE Abmin key for melody matches Abmin key for bass
sound3 = 99_Abmin_basstrack_1.wav #KEYNOTE Abmin key for bass matches Abmin key for melody
#use sound1, sound2 & sound3 variables further

#interation 2
sound1 = 95_drumtrack_2.wav
sound2 = 95_Bbmin_melodytrack_2.wav
sound3 = 95_Bbmin_basstrack_2.wav
#use sound1, sound2 & sound3 variables further

#etc...

我正在使用 sound1,2,3 进行进一步处理,我在脚本中使用嵌套的 for 循环来遍历一个大列表而不是三个,这很粗糙,但是我使用了太多的缩进,我被困在如何使我的方法更有效。

我知道 itertools 可能会有所帮助,但不够熟练,无法实施。我还被告知在这种情况下我不需要生成器,因为列表是有限的。

标签: pythonlisttuplesnested-loopsitertools

解决方案


也许是这样的

for i, element in enumerate(zip(drumlist, melodylist, basslist)):
    sound1, sound2, sound3 = element
    keynote = f" #KEYNOTE {sound2.key} key for melody matches {sound3.key} key for bass" if sound2.key == sound3.key else ''
    print(f"interation {i+1}")
    print(f"sound1 = {sound1.title}")
    print(f"sound2 = {sound2.title}{keynote}")
    print(f"sound3 = {sound3.title}{keynote}")
    print()

输出

interation 1
sound1 = 99_drumtrack_1.wav
sound2 = 99_Abmin_melodytrack_1.wav #KEYNOTE Abmin key for melody matches Abmin key for bass
sound3 = 99_Abmin_basstrack_1.wav #KEYNOTE Abmin key for melody matches Abmin key for bass

interation 2
sound1 = 95_drumtrack_2.wav
sound2 = 95_Bbmin_melodytrack_2.wav #KEYNOTE Bbmin key for melody matches Bbmin key for bass
sound3 = 95_Bbmin_basstrack_2.wav #KEYNOTE Bbmin key for melody matches Bbmin key for bass

interation 3
sound1 = 93_drumtrack_3.wav
sound2 = 93_Fmaj_melodytrack_3.wav #KEYNOTE Fmaj key for melody matches Fmaj key for bass
sound3 = 93_Fmaj_basstrack_3.wav #KEYNOTE Fmaj key for melody matches Fmaj key for bass

推荐阅读