从python中列表列表的标记中拉平列表?

时间:2019-06-18 08:59:41

标签: python python-3.x list token flatten

假设我有一个列表列表(包含句子标记)。

例如:

new_list = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]

我想将它们合并回一个列表中?

如何实现?有任何捷径吗?

输出:

  

[“大家好,我是个好男孩。”,“ python是一种语言”。]

我尝试的方法如下:

1) new_list_1 = (''.join(str(new_list)))

2) from itertools import chain
   new_list_1 = list(chain(*new_list))

目前,我的输出(仅对于合并令牌而言)为:

new_list_1 = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.' 'python', 'is', 'a', 'language', '.']

3 个答案:

答案 0 :(得分:1)

尝试一下:

new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]
new_list = [' '.join(i) for i in new_list]

输出

['hello folks i am a good boy .', 'python is a language .']

如果要添加最后一个没有空格的项目,请尝试以下操作:

new_list = [' '.join(i[:-1])+i[-1] for i in new_list]

输出

['hello folks i am a good boy.', 'python is a language.']

请注意,在这种情况下,.之前的两个字符串中都没有添加空格

答案 1 :(得分:1)

您的第一种方法将整个列表转换为字符串

In [7]: ''.join(str(new_list))                                                                                                  
Out[7]: "[['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]"

第二种方法会使您的清单变平

In [10]: new_list_1 = list(chain(*new_list))                                                                                    

In [11]: new_list_1                                                                                                             
Out[11]: 
['hello',
 'folks',
 'i',
 'am',
 'a',
 'good',
 'boy',
 '.',
 'python',
 'is',
 'a',
 'language',
 '.']

理想情况下,最后一个元素.应该在单词之前,因为标点符号不是令牌,所以列表应该看起来像

new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy.'], ['python', 'is', 'a', 'language.']]

相反,您要遍历列表并将str.join应用于子列表

In [13]: [ ' '.join(item) for item in new_list]                                                                                 
Out[13]: ['hello folks i am a good boy.', 'python is a language.']

您还可以使用mapstr.join应用于列表项

In [14]: list(map(' '.join, new_list))                                                                                          
Out[14]: ['hello folks i am a good boy.', 'python is a language.

答案 2 :(得分:1)

尝试列表理解

new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]

res_list = [' '.join(x) for x in new_list]  # this line will do your work

print(res_list)
  

结果:['大家好,我是个好男孩。','python是一种语言。']