有没有办法将值放在预设的句子上,如果有重复的单词则替换它们?

时间:2015-11-29 08:23:09

标签: python regex

我一直在查看相当多的函数,以找到一个可行的函数,但我没有运气。 我需要创建一个程序,它将有一个输入/预设字符串变量,其中已有句子。 我已经列出了这个句子,所以它已经有了每个单词的值。

sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT CAN YOU DO FOR YOUR COUNTRY"
listSentence = sentence.split(" ")

询问将具有值0,不具有值1,具有值2的是什么,您将具有值3。 等等... 然后在第9个位置重复询问,所以我想知道如何让所有重复的单词都具有第一个值。因此,第9个问题,应该具有值0.第10个单词,什么是值3,依此类推。

3 个答案:

答案 0 :(得分:1)

您可以使用字典将单词的第一个索引保留为键,将真实索引保留为列表中的单词作为值:

>>> words = sentence.split()
>>> d={}
>>> for i,j in enumerate(words):
...   d.setdefault(words.index(j),[]).append((i,j))
... 
>>> d
{0: [(0, 'ASK'), (9, 'ASK')], 1: [(1, 'NOT')], 2: [(2, 'WHAT'), (10, 'WHAT')], 3: [(3, 'YOUR'), (15, 'YOUR')], 4: [(4, 'COUNTRY'), (16, 'COUNTRY')], 5: [(5, 'CAN'), (11, 'CAN')], 6: [(6, 'DO'), (13, 'DO')], 7: [(7, 'FOR'), (14, 'FOR')], 8: [(8, 'YOU'), (12, 'YOU')]}
>>> 

如果你想要索引列表,你可以使用如下列表理解:

>>> [words.index(i) for i in words]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 2, 5, 8, 6, 7, 3, 4]

答案 1 :(得分:1)

也许是这样的:

d = {}
i = 0
values = []
for i, word in enumerate(sentence.split(" ")):
    if not word in d:
        d[word] = i
    values += [d[word]]

结果values列表:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 2, 5, 8, 6, 7, 3, 4]

答案 2 :(得分:-1)

您可以创建一个字典,其中包含单词作为键,第一个位置作为值。对于每个单词,检查单词是否在字典中,如果不是 - 将其与位置一起插入并将位置添加到输出中,如果是,则从字典中获取位置并将其添加到输出