我有一個列表:Python的 - 如何返回字符串中的位置,角色從列表匹配
symbol_list = ['/', '.', '\"', '-']
和目前包含一個不斷變化的字符串:
string = 'This is a string/ of "text"'
和我試圖找到最有效的方法來返回索引值,其中列表中的第一個匹配是在字符串中進行的。例如上例中指數值爲16
。
有什麼建議嗎?
我有一個列表:Python的 - 如何返回字符串中的位置,角色從列表匹配
symbol_list = ['/', '.', '\"', '-']
和目前包含一個不斷變化的字符串:
string = 'This is a string/ of "text"'
和我試圖找到最有效的方法來返回索引值,其中列表中的第一個匹配是在字符串中進行的。例如上例中指數值爲16
。
有什麼建議嗎?
首先,讓你的符號列表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
您可以通過(索引,字符)對迭代與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
同樣完美的作品,謝謝你了。 – Kudrllr
pattern = re.compile('['+"".join(symbol_list)+']')
print string.index(pattern.search(string).group())
我們歡迎幫助OP瞭解解決方案的答案。通過添加上下文和解釋可以改進您的答案。 –
雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – andreas
完美地工作,謝謝。 – Kudrllr