我有一个如下所示的元组列表
a=[(40, 41, 42, 43), (44, 45, 46, 47, 48), (109, 110, 111, 112, 113, 114)]
每个数字代表一个和弦的 ID。每个元组代表一个部分,它可以有可变数量的和弦。
我想以这样的方式应用循环,以便我可以访问每个部分的和弦的每个 ID。最后,我必须应用另一个函数来根据 id 获取每个和弦的长度,并希望以相同的方式保存它。 例如
b=[(1.2, 1.4, 1.4, 4.3), (4.4, 1.45, 2.6, 2.7, 2.4), (1.9, 1.1, 1.8, 1.2,13, 1)]
我如何为每个元组应用这样一个带有变量计数器的循环?
我试过的是
i= len(a)
j=len(i)
for k in range(i):
for l in range(j):
c =a[k][l]
length= getLength(c) # function to get length for chord ID c
b[k][l]= length
getLength 函数可以替换为示例中的任何数字
有什么建议吗?
最佳答案
[tuple(getLength(i) for i in tup) for tup in a]
基本上你遍历每个“部分”,这实际上是一个通过代码片段 for tup in a
的元组。对于您想要的这些“部分”中的每一个,您都可以将所需的功能 - 此处为 getLength
- 应用于每个和弦。基本上 getLength(i) for i in tup
做了什么。你想要一个元组作为输出......所以只需将它包装在 tuple
函数中。
列表理解可以扩展为(但不推荐):
b = []
for tup in a:
chord_length = []
for id in tup:
chord_length.append(getlength(id)
b.append(tuple(chord_length))
关于python - 访问具有可变长度的元组列表的元素并以相同的格式保存输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37682744/