访问具有可变长度的元组列表的元素,并以相同的格式保存输出

时间:2016-06-07 14:54:53

标签: python linux list tuples

我有一个像下面这样的元组列表

a=[(40, 41, 42, 43), (44, 45, 46, 47, 48), (109, 110, 111, 112, 113, 114)]

每个数字代表和弦的ID。每个元组表示可以具有可变数量的和弦的部分。

我想以这样的方式应用循环,即我可以访问每个部分的和弦的每个ID。最后,我必须应用另一个函数来根据id获取每个和弦的长度,并希望以相同的方式保存它。 e.g。

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函数可以替换为示例中的任何数字

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

[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))