从字符串python中的集合获取any char的第一个外观

2024-09-29 19:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有更好的方法来找到someStr中某个字符的第一次出现:“x”、“y”、“z”?在

def findFirstAppearance(someStr):
    x = someStr.find('x');
    y = someStr.find('y');
    z = someStr.find('z');

    if x == -1: x= len(someStr);
    if y == -1: y= len(someStr);
    if z == -1: z= len(someStr); 

    return min(x,y,z);

例如:对于someStr=“axby”,它应该返回1。 对于someStr=“aybx”,它也应该返回1。在

谢谢!在


Tags: 方法lenreturnifdeffindmin字符
3条回答

也许:

>>> s = 'this string x contains y several letters z'
>>> next(i for i,c in enumerate(s) if c in 'xyz')
12
>>> s[12]
'x'

如果找不到异常,则会引发异常,可以使用默认值进行修复:

^{pr2}$

您还可以预先构造一个集来测试成员资格:

>>> special = set("vmp")
>>> next((i for i,c in enumerate(s) if c in special), -1)
27

如果有很多字母需要测试,那么这个速度可能会更快;这在很大程度上取决于所涉及的大小。很容易实验,如果它是重要的,但(扰流板警报)它可能不是

这里有一个使用正则表达式的替代方法。在

import re
def find_first_dx(needles, haystack):
    match = re.search('|'.join(map(re.escape, needles)), haystack)
    return match.start() if match else -1

示例:

^{pr2}$

我想这就是你要找的。这将查找字符串中第一个出现的may字符(items)。它的工作原理就像str.find。在

def findany(string, items, start, end=-1):
    if end == -1:
        end = len(string)

    for i in range(start, end):
        c = string[i]
        if c in items:
            return i

    return -1

#      01234567
inp = "hellozxy"

print findany(inp, "xyz")    # 5 = z
print findany(inp, "?")      # -1 = not found
print findany(inp, ["o", "l"], 3)    # 3, skips the first 'l'

注意:您以items的形式传递一个字符列表(1个字符的字符串)。在python中,字符串就是这样。如果您传递类似于[“x”,“y”,“blah”]的内容,它将不起作用(它将忽略“blah”)。在

相关问题 更多 >

    热门问题