我正在尝试按如下方式过滤元组...为简洁起见,不包括一些代码:
1) print >> sys.stderr, "audio", audio
2) print >> sys.stderr, "audio[0]", audio[0]
3) print >> sys.stderr, "audio[1]", audio[1]
4) audio_lang = filter(lambda a: a[1]==LANG, audio)
它传递了一个包含2个元素的元组,运行如下:
D:\Staging\Test>cleanMKV.py .
audio [('fre',), ('eng',)]
audio[0] ('fre',)
audio[1] ('eng',)
Traceback (most recent call last):
File "D:\Staging\Test\cleanMKV.py",
audio_lang = filter(lambda a: a[1]
File "D:\Staging\Test\cleanMKV.py",
audio_lang = filter(lambda a: a[1]
IndexError: tuple index out of range
元组是用RE正确创建的,我正处于我要过滤的点,如第4行所示。它试图在音频中引用音频a [1]。
任何帮助表示感谢。
答案 0 :(得分:2)
首先,您定义
audio = [('fre',), ('eng',)]
实际上是两个元素('fre',)
和('eng',)
的列表,它们都是仅包含单个元素的元组,分别是'fre'
和'eng'
。
现在,如果你这样做
audio_lang = filter(lambda a: a[1]==LANG, audio)
你要说的只保留音频元素,其中第二个元素等于LANG
。但是,由于您的列表元素('fre',)
和('eng',)
是长度为1的元组,您将获得
IndexError: tuple index out of range
因为您正在尝试访问不存在的第二个元素。
你可以做到
audio_lang = filter(lambda a: a[0]==LANG, audio)
即访问第一个元素或重新定义音频并执行
audio = ['fre', 'eng']
audio_lang = filter(lambda a: a == LANG, audio)
但是我不明白,你想要完成什么,所以这可能不是你想要的。但希望这可以解释您所遇到的错误来源。
答案 1 :(得分:0)
a
是一个元组,但audio
是一个列表。组成audio
的两个元组中每个元组只有一个项目。因此,评估audio[0][1]
或audio[1][1]
将返回tuple index out of range
。
>>> audio = [('fre',),('eng',)]
>>> audio
[('fre',), ('eng',)]
>>> audio[0]
('fre',)
>>> audio[0][0]
'fre'
>>> audio[0][1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
......但是:
>>> audio = [('fre',1),('eng',2)]
>>> audio[0][1]
1