python - 如何迭代命名元组列表,按键值过滤和分组,然后处理输出
问题描述
如何从这 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 可能会有所帮助,但不够熟练,无法实施。我还被告知在这种情况下我不需要生成器,因为列表是有限的。
解决方案
也许是这样的
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
推荐阅读
- python - 是否有与 Unix '$' 等价的 python?命令?
- android - android应用程序收到通知时如何显示自定义对话框
- jquery - 如何使用语义 ui 提供按钮剥离效果
- javascript - 修改函数以调用给定的回调并返回其结果
- artificial-intelligence - RL 代理的批评损失
- javascript - 用下拉值替换 URL 的一部分 - onchange
- amazon-web-services - AWS 自定义授权方、身份服务器和范围
- html - 使背景图像响应
- oauth - 在 Cognito 用户池应用程序客户端的回调 URL 中放置什么以用于与 FB Messenger 的帐户链接?
- python - Ubuntu (WSL) Python 与 Python3.7 Microsoft Store 应用程序分开?