在列表中找到相同元素的索引

7
假设我需要找出单词“internet”中每个字母'e'的位置:
letter = 'e'
word = 'internet'
idx = word.index(letter)

但是这段代码只给出了第一个索引。我该如何找到其余的索引?

2
当然,这里的“word”是一个字符串,而不是一个列表。 - johnsyweb
好奇心促使我问一下,你为什么想要这些索引? - Spencer Rathbun
1
是的,我的错误。当然是一个字符串...我正在编写猜词游戏。 - markiisi
虽然我很荣幸我的答案被接受了,但是我建议你看一下开头的那句话:对于一个猜词游戏,当你在一个字符串中寻找单个字母的所有实例时,Mark的答案才是你想要的。 - johnsyweb
3个回答

13

尝试在 列表推导 中使用 enumerate

[index for (index, letter) in enumerate(word) if letter == 'e']

6

Mark的回答适用于单个字母。我添加这个是因为如果您要查找的子字符串不止一个字符。

如果要使用str.index(),它可以采用可选的start位置,并且如果未找到所需的子字符串,则会raise ValueError

>>> letter = 'e'
>>> word = 'internet'
>>> last_index = -1
>>> while True:
...     try:
...         last_index = word.index(letter, last_index + 1)
...         print last_index
...     except ValueError:
...         break
... 
3
6

2
如果你要使用这个,我建议将它放入生成器函数中,以产生索引。 - yak
@yak:非常同意。我只是举了一个基本的例子。 - johnsyweb

0

试试这个:

word = 'internet'
letter = 'e'
[i for i in xrange(len(word)) if word[i] == letter]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接