我有一些简单的代码:
def find(str, ch):
for ltr in str:
if ltr == ch:
return str.index(ltr)
find("ooottat", "o")
该函数仅返回第一个索引。如果我将 return
更改为 print
,它将打印0 0 0。为什么会这样,有没有方法可以得到 0 1 2
?
为了美化@Lev和@Darkstar发布的五星一行代码:
word = 'Hello'
to_find = 'l'
print(", ".join([str(i) for i, x in enumerate(word) if x == to_find]))
这只是使索引数字更明显地分离。
结果将是:2, 3
所有其他答案都有两个主要缺陷:
def findall(haystack, needle):
idx = -1
while True:
idx = haystack.find(needle, idx+1)
if idx == -1:
break
yield idx
这段代码通过迭代字符串 haystack
来查找字符串 needle
,始终从上一次迭代的位置开始。它使用内置的 str.find
方法来查找,这比逐个字符地迭代字符串要快得多。它不需要任何新的导入。
def find(ch,string1):
for i in range(len(string1)):
if ch == string1[i]:
pos.append(i)
str
不是关键字,而只是一个内置名称(无法用作变量名的关键字),以上为翻译内容。 - Wooble