0

我正在尝试按如下方式过滤元组......为简洁起见,未包含一些代码:

    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]。

任何帮助表示赞赏。

4

2 回答 2

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)

但我不明白,你想完成什么,所以这可能不是你想要的。但希望这可以解释您遇到的错误的根源。

于 2013-03-07T00:35:05.647 回答
0

a是一个元组,但audio它是一个列表。组成 的两个元组中的每个元组中只有一个项目audio。因此,评估audio[0][1]oraudio[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
于 2013-03-07T00:33:51.330 回答