我正在用 Python 2.7 编写一个程序来查找 MusicXML 乐谱中的某些功能。目前我正在编写查找和弦(本质上是同时演奏的音符)所需的函数。乐谱将有不同的音乐部分(例如低音、 fiddle 、女高音等),在我的程序中,每个部分都有一个列表,该列表包含所有这些部分的音符及其时间间隔作为字符串。
这些列表存储在字典中,其中键是它们所属部分的名称,它们本身不存储为变量,因为我不知道乐谱将有多少部分。使用字典可以让我动态创建键名。例如
scoreDict = {Bass : [A#3 1, B3 3, C4 5, ... X n], Soprano : [C#5 1, F#4 2, C#2 3, ... X n]}
在上面的示例中,音符 A#3 和 C#5 以相同的时间间隔 (1) 出现。
要查找和弦,我需要迭代字典中的每个列表,找到音符的时间间隔匹配的位置,然后返回这些音符的名称,以便为用户提供演奏的和弦。
但是问题是这些列表的数量尚未确定(当我动态填充包含它们的字典时可能有任意数量的列表),因此我无法通过编写来简单地迭代它们:
for val1, val2 in list1, list2:...
迭代未确定数量的列表的最佳方法是什么?我确实考虑过为每个列表创建一个字典,其中键是注释位置,值是注释,但问题是时间间隔可以在列表中重复,从而导致重复的键。
最佳答案
我认为您的示例中缺少zip
for val1, val2 in zip(list1, list2):
# ...
您可以将“splat”运算符与zip
一起使用
for item in zip(*list_of_lists):
# item is a tuple (val1, val2, val3, ...)
关于python - 如何在 Python 中迭代不确定数量的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162906/