2016-02-12 59 views
2

我需要程序的幫助來識別句子中的單個單詞,將它們存儲在列表中,並將原始句子中的每個單詞替換爲該單詞在名單。這是我到目前爲止。列表中的單個詞然後打印這些詞的位置

例如:

'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)) 

我已成功地識別,但是我的工作如何替換原始列表與的個別單詞的位置的話列表中的各個單詞。

+0

你的意思是第一個外觀指數字? – Obsidian

+0

我認爲你需要清單上的'.index'方法。 'help([]。index)' –

回答

4

您還可以創建一個字典映射與他們的初始位置的話,那麼用它來與各自的崗位上替代詞。

>>> 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] 
>>> 
+0

嗯....好簡潔 – danidee

+0

感謝您的解答!它適用於我的目的。 – Faker

+0

@Faker .. no pblm .. :) –

10

是否這樣?只要做一個列表理解來獲得所有單詞的所有索引。

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] 
0

這樣做的天真的方式。

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]) 
+0

請注意,我在使用'str()'進行類型轉換,這樣我就可以將它們加入到您要求的格式中。 – GokulSrinivas

0

而不是OrderedDict你可以使用一個集合。

refined = list(set(FilteredSentence)) 

比你可以檢查列表中的每個單詞。

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

起始-TC是你自找的

0

現有的答案只是一個細化的結果 - 您可以使用字典解析來創建查找從詞索引:

>>> 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] 
相關問題