python - 如何在 Python 中迭代不确定数量的列表?

标签 python list loops

我正在用 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/

相关文章:

c - 尝试释放链接列表时出现 SIGABRT

c# - 获取多选列表框的选中值

java - Hangman 赋值和循环条件

python - 如何仅从时间戳列中检索年份?

python - 在django中创建多个域中具有相同密码的用户

python - 删除字符串python中的utf-8文字

java - 双迭代器循环

python - Pandas - 按条件过滤索引中所有值的多索引

iphone - 重复调用webservice, objective-c

c - 问题查找字符串中给定子字符串的出现次数