从 python 列表列表的标记中拉平列表?
Flattening list from tokens of list of lists in python?
假设我有一个列表列表(包含句子标记)。
例如:
new_list = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]
我想将它们合并回一个列表吗?
如何实现?有什么捷径吗?
输出:
['hello folks i am a good boy.', 'python is a language'.]
我试过的如下:
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', '.']
试试这个:
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 .']
如果你想添加最后一个项目之前没有任何 space,试试这个:
new_list = [' '.join(i[:-1])+i[-1] for i in new_list]
输出 :
['hello folks i am a good boy.', 'python is a language.']
注意,在这种情况下,两个字符串中 .
之前都没有添加 space
您的第一种方法将整个列表转换为字符串
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.']
您还可以使用 map 将 str.join
应用到列表的项目上
In [14]: list(map(' '.join, new_list))
Out[14]: ['hello folks i am a good boy.', 'python is a language.
尝试列表理解
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)
result : ['hello folks i am a good boy .', 'python is a language .']
假设我有一个列表列表(包含句子标记)。
例如:
new_list = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]
我想将它们合并回一个列表吗?
如何实现?有什么捷径吗?
输出:
['hello folks i am a good boy.', 'python is a language'.]
我试过的如下:
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', '.']
试试这个:
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 .']
如果你想添加最后一个项目之前没有任何 space,试试这个:
new_list = [' '.join(i[:-1])+i[-1] for i in new_list]
输出 :
['hello folks i am a good boy.', 'python is a language.']
注意,在这种情况下,两个字符串中 .
您的第一种方法将整个列表转换为字符串
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.joinIn [13]: [ ' '.join(item) for item in new_list]
Out[13]: ['hello folks i am a good boy.', 'python is a language.']
您还可以使用 map 将 str.join
应用到列表的项目上
In [14]: list(map(' '.join, new_list))
Out[14]: ['hello folks i am a good boy.', 'python is a language.
尝试列表理解
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)
result : ['hello folks i am a good boy .', 'python is a language .']