Python: NLTK: 访问列表列表的元素

Python: NLTK: access element of list of list

我有以下列表,作为标记化后的结果:

[['Who', 'are', 'you', '?'],
 ['I', 'do', 'not', 'know', 'who', 'you', 'are'],
 ['What', 'is', 'your', 'name', '?']]

现在我想要一个包含 "simple" 元素的列表,例如:

['Who','are','you','?','I','do','not','know','who'...]

我已经尝试了所有我能想到的方法,使用(嵌套)for 循环、(嵌套)while 循环...我要么得到列表 ['Who','Who','Who',...](等等),要么得到 "list index out of range".

有人可以帮帮我吗?谢谢!

您可以只使用 extend python

中的函数
In [1]: a= [['Who', 'are', 'you', '?'], ['I', 'do', 'not', 'know', 'who', 'you', 'are'], ['What', 'is', 'your', 'name', '?']]
In [2]: b = []
In [3]: for list_ in a:
    b.extend(list_)
   ...:     

In [4]: b
Out[4]: ['Who','are','you','?','I','do', ...]

是否要合并列表?

flat_list = []
for list_item in nested_list:
    flat_list += list_item

>>flat_list
>>['Who', 'are', 'you', '?', 'I', 'do', 'not', 'know', 'who', 'you', 'are', 'What', 'is', 'your', 'name', '?']

可以查看可能的重复项here

你可以试试这个

Python >=2.6,使用不需要解包列表的itertools.chain.from_iterable()

>>> import itertools
>>> list2d = [["who", "are", "you", "?"]....]
>>> merged = list(itertools.chain.from_iterable(list2d))

只是为了在看到其他答案时记录下来,更pythonic的方法是使用nested list comprehension,像这样:

original_list = [[1], [2, 3]]
flat_list = [i for sublist in original_list for i in sublist]