【问题标题】:Python - How to return the position in string where character matches from a list [duplicate]Python - 如何从列表中返回字符匹配的字符串位置[重复]
【发布时间】:2017-02-16 13:22:54
【问题描述】:

我有一个清单:

symbol_list = ['/', '.', '\"', '-']

和一个正在变化的字符串,当前包含:

string = 'This is a string/ of "text"'

我正在尝试找到最有效的方法来返回索引值,其中列表中的第一个匹配项是在字符串中进行的。例如上例中的索引值为16

有什么建议吗?

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    首先,使您的符号列表成为 O(1) 包含检查的集合。然后使用生成器并获取它的第一个值。我推荐 -1 作为后备值。

    >>> symbol_list = ['/', '.', '\"', '-']
    >>> symbol_set = set(symbol_list)
    >>> string = 'This is a string/ of "text"'
    >>> idx = next((idx for idx, c in enumerate(string) if c in symbol_set), -1)
    >>> idx
    16
    

    【讨论】:

    • 完美运行,谢谢。
    【解决方案2】:

    您可以使用enumerate() 遍历(索引、字符)对,并使用集合进行快速查找:

    >>> def get_pos(s):
    ...     for i, c in enumerate(s):
    ...         if c in {'/', '.', '\"', '-'}:
    ...             return i
    ... 
    >>> s = 'This is a string/ of "text"'
    >>> get_pos(s)
    16
    

    【讨论】:

    • 也很好用,也谢谢你。
    【解决方案3】:
    pattern = re.compile('['+"".join(symbol_list)+']')
    print string.index(pattern.search(string).group())
    

    【讨论】:

    • 我们欢迎帮助 OP 理解解决方案的答案。通过添加上下文和解释可以改进您的答案。
    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案4】:

    试试这个:

    (i for i,c in enumerate(string) if c in symbol_list ).next()
    

    【讨论】:

    • 那是专门为 Python 2 设计的
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2016-10-12
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多