我有一个迭代的元组列表,并使用格式化程序在不同的点上获取这些元组的一部分。格式化程序一直给我错误。
列表中的每个元组都被格式化为(" 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()参数必须是字符串或数字,而不是'元组'"
答案 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)