Python 列表中的单个单词,然后打印这些单词的位置

Python 列表中的单个单词,然后打印这些单词的位置,python,Python,我需要一个程序的帮助,该程序可以识别句子中的单个单词,将这些单词存储在列表中,并将原始句子中的每个单词替换为该单词在列表中的位置。这是我到目前为止所拥有的 例如: 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR' COUNTRY 将重新创建为1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5 from collections import OrderedDict sentence =

我需要一个程序的帮助,该程序可以识别句子中的单个单词,将这些单词存储在列表中,并将原始句子中的每个单词替换为该单词在列表中的位置。这是我到目前为止所拥有的

例如:

'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR' COUNTRY
将重新创建为1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5

from collections import OrderedDict

sentence = input("Please input a sentence without punctuation").upper()

punctuation = ("`1234567890-=¬!£$%^&*()_+\|[];'#,./{}:@~<>?")

FilteredSentence = ("")

for char in sentence:
    if char not in punctuation:
        FilteredSentence = FilteredSentence+char

FilteredSentence =  FilteredSentence.split(" ")

refined = list(OrderedDict.fromkeys(FilteredSentence))
从集合导入订单数据
句子=输入(“请输入一个没有标点符号的句子”)。大写()
标点符号=(“`1234567890-=,!$%^&*()”、./{}:@~?)
FilteredSentence=(“”)
对于句子中的字符:
如果字符不在标点符号中:
FilteredSentence=FilteredSentence+char
FilteredSentence=FilteredSentence.split(“”)
精炼=列表(OrderedDict.fromkeys(FilteredSentence))

我已经设法识别了列表中的单个单词,但是我找到了如何用单个单词的位置替换原始列表中的单词。

像这样?只要做一个列表理解就可以得到所有单词的索引

In [77]: sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"

In [78]: words = sentence.split()

In [79]: [words.index(s)+1 for s in words]
Out[79]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5]

您还可以创建一个字典,将单词映射到它们的初始位置,然后使用它将单词替换为它们各自的位置

>>> s = 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY'
>>> 
>>> 
>>> l = s.split()
>>> l
['ASK', 'NOT', 'WHAT', 'YOUR', 'COUNTRY', 'CAN', 'DO', 'FOR', 'YOU', 'ASK', 'WHAT', 'YOU', 'CAN', 'DO', 'FOR', 'YOUR', 'COUNTRY']
>>> 
>>> d = dict((s, l.index(s)+1) for s in set(l))
>>> d
{'DO': 7, 'COUNTRY': 5, 'CAN': 6, 'WHAT': 3, 'ASK': 1, 'YOUR': 4, 'NOT': 2, 'FOR': 8, 'YOU': 9}
>>> list(map(lambda s: d[s], l))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5]
>>> 

做这件事的天真方式

mystr = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
a = mystr.split(" ")
k = dict()
cnt = 1
b = []
for m in a:
    if m not in k:
        k[m] = str(cnt)
        cnt = cnt + 1
    b.append(k[m])
print ",".join(b)
较短的版本

mystr = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
a = mystr.split(" ")
print ",".join([str(a.index(k)+1) for k in a])

你可以用一套来代替定单

refined = list(set(FilteredSentence))
然后你可以对照列表检查每个单词

index_list = []
for word in FilteredSentence:
    index_list.append(refined.index(word) +1)

索引列表是您要求的结果,只是对现有答案的细化-您可以使用字典理解创建从单词到索引的查找:

>>> lookup = {w:(i+1) for i, w in list(enumerate(refined)) }

>>> lookup
{'DO': 7, 'WHAT': 3, 'FOR': 8, 'COUNTRY': 5, 'NOT': 2, 'CAN': 6,
 'ASK': 1, 'YOU': 9, 'YOUR': 4}
然后使用列表理解生成输出索引:

>>> [lookup[w] for w in FilteredSentence]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5]

你是说那个词的第一个外观索引?我想你需要列表上的
.index
方法<代码>帮助([].index)请注意,我正在使用
str()
进行类型转换,这样我就可以加入他们,以获得您要求的格式。感谢您的解决方案!这对我来说非常有效。@Faker。。没有pblm:)