2016-02-20 46 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,你的回答很好,保持它;有些人稍后查看此问题可能不想使用像我这样的图书馆。尽管如此,你已经在列表理解结束时错过了一个']'。 –

相关问题