【发布时间】:2021-05-07 20:20:00
【问题描述】:
a = "programming in python is Fun"
a.find("i") = 8
它返回"i" 在a 中第一次出现的索引。
是否可以找到第二个"i" 的索引?
【问题讨论】:
-
是的,看看索引方法的行为。 docs.python.org/3/library/…
a = "programming in python is Fun"
a.find("i") = 8
它返回"i" 在a 中第一次出现的索引。
是否可以找到第二个"i" 的索引?
【问题讨论】:
您可以使用enumerate() 和list comprehension 来查找所有索引:
s = "programming in python is Fun"
my_char = "i"
my_indexes = [i for i, x in enumerate(s) if x == my_char]
# where `my_indexes` holds:
# [8, 12, 22]
这里my_char 是您要查找其索引的字符。而my_indexes 是一个列表,其中包含每次在字符串中找到my_char 的索引。详情请参考enumerate() document。
因此,您可以通过以下方式访问第二次出现的索引:
>>> my_indexes[1]
12
【讨论】:
.find() 快,但算法更好恕我直言。如果可以的话,删除 , x in enumerate, ì for i in s 就可以了,字符串只是一个字符列表。
find() 也有一个可选的起始索引,您可以将其用作:
a = "programming in python is Fun"
first = a.find('i')
print(a.find('i',first+1))
【讨论】:
您也可以通过以下方式使用numpy:
import numpy as np
a = "programming in python is Fun"
x = np.frombuffer(a.encode(), dtype=np.uint8)
np.where(x == ord('i')) # (array([ 8, 12, 22]),)
使用np.frombuffer 将str 重新解释为字符缓冲区,然后使用np.where 将返回与您感兴趣的字符匹配的所有索引(或更准确地说是表示Unicode 字符的整数,使用ord)。
【讨论】: