Python:从迭代列表中的元组中获取元素

时间:2017-05-22 04:57:00

标签: python list tuples

我有一个迭代的元组列表,并使用格式化程序在不同的点上获取这些元组的一部分。格式化程序一直给我错误。

列表中的每个元组都被格式化为(" name," HH:MM:SS")

trackNum = 0
for i in markers:
    trackNum = trackNum + 1
    track = '''
    TRACK %s AUDIO
    \t TITLE "%s"
    \t INDEX 01 %s
    '''  % (str(trackNum).zfill(2), markers[i][0], markers[i][1])

如果我只是在格式化程序中使用plain [i],我会得到错误" List索引必须是整数,而不是元组"。如果我使用[int(i)],我得到" int()参数必须是字符串或数字,而不是'元组'"

3 个答案:

答案 0 :(得分:2)

marker[i]替换为i,因为您正在使用tuple而不是range(tuple)进行迭代。

trackNum = 0
for i in markers:
    trackNum = trackNum + 1
    track = '''
    TRACK %s AUDIO
    \t TITLE "%s"
    \t INDEX 01 %s
    '''  % (str(trackNum).zfill(2), i[0], i[1])

在这种情况下,命名变量i并不是最好的主意,因为i通常是指索引。也许将其更改为for marker in markers:

除此之外,您的代码可以使用enumerate进一步缩小:

for trackNum, marker in enumerate(markers, start = 1):        
    track = '''
    TRACK %s AUDIO
    \t TITLE "%s"
    \t INDEX 01 %s
    '''  % (str(trackNum).zfill(2), marker[0], marker[1])

答案 1 :(得分:0)

如果markers是元组列表,则在此代码中< - p>

for i in markers:

i代表一个元组。

因此,您应该使用i[0]代替markers[i][0]。同样的 markers[i][1]

由于i是一个元组而你正在使用markers[i]...,python会给出该错误,因为元组用于索引列表

答案 2 :(得分:0)

@abccd为您提供解决问题的简明方法 我要添加的唯一内容是我会使用str.format()代替旧样式替换:

for trackNum, marker in enumerate(markers, 1):
    track = '''
    TRACK {:02} AUDIO
    \t TITLE "{}"
    \t INDEX 01 {}
    '''.format(trackNum, *marker)