如何在列表中查找和打印多个元素的索引?

时间:2016-02-20 19:17:16

标签: python list indexing

我试图创建一个基本程序来挑选引号中单词的位置。到目前为止,我已经获得了以下代码:

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

但是,这只会打印单词索引的第一个位置,如果引号只包含单词一次就可以了,但如果单词出现多次,它仍然只打印第一个位置而不打印其他位置

我怎样才能让程序连续打印每个位置?

注意:非常容易混淆,string这里存储了一个列表。该程序应该找到存储在该列表中的单词的位置。

3 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:0)

以下是我快速制作的代码:

 if (Convert.ToString(dgvAttendance.Rows[i].Cells["Present"].Value) == "P")
    {
        sumP += 1;
    }

这应该有用,虽然返回单词的索引。您可以进行计算,在该单词之前添加所有单词的长度,以获得该字母的索引。

答案 2 :(得分: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