2016-02-20 47 views
0

我正在嘗試創建一個基本程序來挑出單詞在報價中的位置。到目前爲止,我有以下代碼:如何查找並打印列表中多個元素的索引?

print("Your word appears in your quote at position(s)", string.index(word)) 

然而,這僅僅打印第一位置的字索引,這是很好的,如果報價僅包含一次的話,但如果詞出現多次次,它仍然只能打印第一個位置,而沒有打印其他位置。

我該怎麼做才能讓程序連續打印每個位置?

注:非常容易混淆,string這裏存儲一個列表。程序應該查找存儲在這個列表中的單詞的位置。

+0

你期望的輸出是什麼,'string'包含了什麼? –

+1

[如何查找列表中所有元素的出現?](http://stackoverflow.com/questions/6294179/how-to-find-all-occurrences-of-an-element-in-a -list) – idjaw

+0

@pp_字符串是我用來存儲用戶報價的列表的名稱(稍有混淆,抱歉) – amezkilljoy

回答

0

也許不是最快/最好的方式,但它會奏效。用於而不是==,以防引號或其他意想不到的標點符號!希望這可以幫助!!

def getWord(string, word): 
    index = 0 
    data = [] 
    for i in string.split(' '): 
     if i.lower() in word.lower(): 
      data.append(index) 
     index += 1 
    return data 
+0

非常感謝,現在有效:) – amezkilljoy

0

這裏是我迅速做了應該工作代碼:

string = "Hello my name is Amit and I'm answering your question".split(' ') 
indices = [index for (word, index) in enumerate(string) if word == "QUERY"] 

這應該工作,雖然回報字的索引。你可以做一個計算,在該單詞之前加上所有單詞的長度,以得到該字母的索引。

1

看起來您正在嘗試查找字符串中某個單詞的出現次數:re庫有一個名爲finditer的函數,該函數非常適合此目的。我們可以用這樣一個列表理解一起造一個詞的索引列表:

>>> import re 
>>> word = "foo" 
>>> string = "Bar foo lorem foo ipsum" 
>>> [x.start() for x in re.finditer(word, string)] 
[4, 14] 

該函數將查找匹配即使字內的另一個,就像這樣:

>>> [x.start() for x in re.finditer("foo", "Lorem ipsum foobar")] 
[12] 

如果你不希望這樣,包住你的字正則表達式像這裏面:

[x.start() for x in re.finditer("\s+" + word + "\s+", string)] 
+0

嗯,你的答案是比我的好。我應該刪除我的答案嗎? (很新的堆棧溢出) –

+0

@AmitGold,你的回答很好,保持它;有些人稍後查看此問題可能不想使用像我這樣的圖書館。儘管如此,你已經在列表理解結束時錯過了一個']'。 –

相關問題