["python","python-3.x"]
In Python 3, why do I get "TypeError: 'zip' object is not subscriptable" (or see a strange result instead of a list)?

I have a tagged file in the format token/tag and I try a function that returns a tuple with words from a (word,tag) list. 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 In python 2.7 it worked well, but in python 3.4 it gives an error on the last line which says TypeError: 'zip' object is not subscriptable. Why did it stop working? How can I fix this? Several other things changed from Python 2 to Python 3 in a parallel manner; see How to use filter, map, and reduce in Python 3.
In Python 2, zip returned a list. In Python 3, zip returns an iterable object. But you can make it into a list just by calling list, as in: list(zip(...)) In this case, that would be: list(zip(*ngram)) With a list, you can use indexing: items = list(zip(*ngram)) ... items[0] etc. But if you only need the first element, then you don't strictly need a list. You could just use next. In this case, that would be: next(zip(*ngram))