我有一个清单:
symbol_list = ['/', '.', '\"', '-']
以及当前包含的更改字符串:
string = 'This is a string/ of "text"'
我正在尝试找到最有效的方法来返回索引值,其中列表中的第一个匹配是在字符串中进行的。例如在上面的示例中,索引值为16
。
请问任何建议?
答案 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())