Python - 如何从列表中返回字符匹配的字符串中的位置

时间:2016-10-07 13:55:12

标签: python list indexing

我有一个清单:

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

以及当前包含的更改字符串:

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

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

请问任何建议?

4 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分: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 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

pattern = re.compile('['+"".join(symbol_list)+']')
print string.index(pattern.search(string).group())