你怎么能在Python中迭代不确定数量的列表?

时间:2014-11-27 04:07:21

标签: python list loops

我正在用Python 2.7编写一个程序来查找MusicXML分数中的某些功能。目前我正在编写寻找和弦所必需的功能(基本上是同时播放的音符)。音乐乐谱将有不同的部分来写音乐(例如低音,小提琴,女高音等),在我的程序中,每个部分都有一个列表,这个列表包含所有部分音符和它们的时间间隔作为字符串。

这些列表存储在字典中,其中键是它们所属部件的名称,它们不会作为变量存储,因为我不知道乐谱所具有的部件数量。使用字典允许我动态创建键名。 e.g。

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:...

迭代未确定数量的列表的最佳方法是什么?我确实考虑为每个列表创建一个字典,其中键是注释位置,值是注释,但问题是时间间隔可以在列表中重复,从而导致重复键。

1 个答案:

答案 0 :(得分:1)

我认为您在示例中缺少zip

for val1, val2 in zip(list1, list2):
    # ...

您可以使用" splat" zip

的运算符
for item in zip(*list_of_lists):
    # item is a tuple (val1, val2, val3, ...)