【问题标题】:How to find index of next similar letter in a string [duplicate]如何在字符串中查找下一个相似字母的索引[重复]
【发布时间】:2021-05-07 20:20:00
【问题描述】:
a = "programming in python is Fun"

a.find("i") = 8

它返回"i" 在a 中第一次出现的索引。
是否可以找到第二个"i" 的索引?

【问题讨论】:

标签: python string substring


【解决方案1】:

您可以使用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 就可以了,字符串只是一个字符列表。
【解决方案2】:

find() 也有一个可选的起始索引,您可以将其用作:

a = "programming in python is Fun"
first = a.find('i')
print(a.find('i',first+1))

【讨论】:

    【解决方案3】:

    您也可以通过以下方式使用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)。

    【讨论】:

    • 为那个任务加载 numpy 不是有点重吗?
    • @Loïc 这可能有点矫枉过正,但如果你有一个很长的字符串,我想这会很快。当然,我还想为给定的方法提供一些其他方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2016-03-07
    • 2021-06-15
    • 2016-12-02
    • 2019-11-04
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多