如何使用Python将bigram列表转换为令牌列表
我想使用Python3.6将bigram列表转换为令牌列表 我有点像:如何使用Python将bigram列表转换为令牌列表,python,python-3.6,Python,Python 3.6,我想使用Python3.6将bigram列表转换为令牌列表 我有点像: input_list = [(‘hi’, ‘my’), (‘my’, ‘name’), (‘name’, ‘is’), (‘is’, ‘x’)] 我想把这个问题转到: output_list = [‘hi’, ‘my’, ‘name’, ‘is’, ‘x’] 您可以从使用列表理解开始,将列表展平,然后获取一组: flat_list = [x for sublist in input_list for x in subli
input_list = [(‘hi’, ‘my’), (‘my’, ‘name’), (‘name’, ‘is’), (‘is’, ‘x’)]
我想把这个问题转到:
output_list = [‘hi’, ‘my’, ‘name’, ‘is’, ‘x’]
您可以从使用列表理解开始,将列表展平,然后获取一组:
flat_list = [x for sublist in input_list for x in sublist]
output_list = set(flat_list)
output_list
{'hi', 'is', 'my', 'name', 'x'}
如果所有输入都遵循该结构,我将提取第一个
元组的第一部分,然后从每个元组中提取最后一个元素,即:
input_list = [("hi", "my"), ("my", "name"), ("name", "is"), ("is", "x")]
output_list = [input_list[0][0]]+[i[-1] for i in input_list]
print(output_list) # ['hi', 'my', 'name', 'is', 'x']
我使用了以下python特性:
- 索引,
[0][0]
表示第一个元素的第一个元素(如果不清楚,我建议先搜索嵌套),[-1]
表示最后一个元素(从末尾开始的第一个元素)
- 列表理解,获取列表中每个元素的最后一个元素
- 列表串联(用
+
表示)将两个列表粘在一起
如果您不想创建一个单独的列表来存储展开的值,并节省空间和避免循环,您可以尝试以下方法:
from itertools import chain
lst = [('hi', 'my'), ('my', 'name'), ('name', 'is'), ('is', 'x')]
flattened = chain(*lst)
elems = list(dict.fromkeys(flattened).keys())
print(elems)
这里的chain(*lst)
基本上是解压元素并展平列表,并将其存储在迭代器对象中,而不是实际存储为列表。然后,您可以将它们转换为set和back,但它们可能会扰乱顺序。所以,您获取所有这些值,并尝试将它们转换为字典的键。由于字典不能有重复的键,它将只接受唯一的元素。因此,如果您获取该dict的键,您将从展平列表中获得唯一的元素。注意:保证从Python 3.7中维护顺序。您尝试过什么,它到底有什么问题?我推荐一个Python教程: