1. ホーム
  2. python

[解決済み] TypeError: 'zip' オブジェクトは添え字を付けることができません。

2022-02-03 16:57:54

質問

token/tag形式のタグ付きファイルを持っていて、(word,tag)リストの中から単語を含むタプルを返す関数を試しています。

def text_from_tagged_ngram(ngram): 
    if type(ngram) == tuple:
        return ngram[0]
    return " ".join(zip(*ngram)[0]) # zip(*ngram)[0] returns a tuple with words from a (word,tag) list

python 2.7ではうまくいったのですが、python 3.4では以下のようなエラーが出てしまいます。

return " ".join(list[zip(*ngram)[0]])
TypeError: 'zip' object is not subscriptable

誰か助けて

どのように解決するのですか?

Python 2の場合。 zip はリストを返しました。Python 3では zip は反復可能なオブジェクトを返します。しかし、これをリストにするためには list というように。

list(zip(...))

この場合は、そうなりますね。

list(zip(*ngram))

リストでは、インデックスを使用することができます。

items = list(zip(*ngram))
...
items[0]

などです。

しかし、最初の要素だけでいいのなら、厳密にはリストは必要ないのです。単に next .

この場合は、そうなりますね。

next(zip(*ngram))