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',)これは実際には 2 つの要素とのリストであり('eng',)、どちらも単一の要素のみを含むタプルであり'fre''eng'それぞれ と です。

今、あなたがするなら

audio_lang = filter(lambda a: a[1]==LANG, audio)

2 番目の要素が に等しいオーディオの要素のみを保持すると言っていますLANG。しかし、あなたのリスト要素('fre',)('eng',)長さ1のタプルであるため、あなたは得ています

IndexError: tuple index out of range

存在しない 2 番目の要素にアクセスしようとしているためです。

あなたができる

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が、リストです。を構成する 2 つのタプルのそれぞれに 1 つの項目しかありません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
于 2013-03-07T00:33:51.330 に答える