给单词分配一个唯一的数字标识

2024-04-18 15:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

任务

我正在尝试为字符串中的单词分配数字标识符。你知道吗

代码

我目前做了以下工作:

mystr = 'who are you you are who'

str_values = mystr.split()
list_values = [str(i) for i, w in enumerate(mystr.split())]

输出:

>>> str_values
['0', '1', '2', '3', '4', '5']
>>> list_values
['who', 'are', 'you', 'you', 'are', 'who']

查询/所需输出

mystr包含重复的单词,因此我想给每个单词分配一个数字,而不是每次分配不同的数字,但不确定应该如何开始这样做。因此,我想list_values输出以下内容:

['0', '1', '2', '2', '1', '0']

Tags: 字符串代码inyoufor数字标识符单词
3条回答

你需要用字典来记录哪些单词已经被看到了

word_map = {}
word_id_counter = 0
def word_id(word):
    global word_id_counter
    if word in word_map:
        return word_map[word]
    else:
        word_map[word] = word_id_counter
        word_id_counter += 1
        return word_map[word]

为了避免使用全局变量,可以将其包装在类中

class WordIdGenerator:
    word_map = {}
    word_id_counter = 0
    def word_id(self, word):
        if word in self.word_map:
            return self.word_map[word]
        else:
            self.word_map[word] = self.word_id_counter
            self.word_id_counter += 1
            return self.word_map[word]

你可以这样使用它:

gen = WordIdGenerator()

[gen.word_id(w) for w in 'who are you you are who'.split()]

输出为:

[0, 1, 2, 2, 1, 0]

我们可以分两个阶段工作:

  • 首先,我们构造一个字典,将单词映射到索引上,因为它们还不存在,并且
  • 接下来我们使用字典来获取单词标识符。你知道吗

比如:

identifiers = {}
idx = 0
for word in mystr.split():
    if word not in identifiers:
        identifiers[word] = idx
        idx += 1

list_values = [identifiers[word] for word in mystr.split()]

这会产生:

>>> [identifiers[word] for word in mystr.split()]
[0, 1, 2, 2, 1, 0]

如果需要,还可以使用str(..)将标识符转换为字符串,但我不明白为什么要这样做:

>>> [str(identifiers[word]) for word in mystr.split()]
['0', '1', '2', '2', '1', '0']

该算法通常适用于O(n)。你知道吗

你可以在另一张单子的帮助下-

n = []
output = [n.index(i) for i in mystr.split() if i in n or not n.append(i)]

第一个n是空列表。{cd2}的元素现在迭代。{if}cd1的元素添加到索引的条件中。你知道吗

现在是条件。有两部分带有or。首先它检查元素是否存在于n。如果是,则获取元素的索引。如果不是,则转到第二部分,它只是将元素附加到列表n。现在append()返回None。这就是为什么我在它前面加了一个not。因此,该条件将得到满足,它将给出新插入的元素索引。你知道吗

基本上,if条件的第一部分限制n中的重复元素加法,第二部分进行加法。你知道吗

相关问题 更多 >