2016-10-07 36 views
0

我有一個列表:Python的 - 如何返回字符串中的位置,角色從列表匹配

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

和目前包含一個不斷變化的字符串:

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

和我試圖找到最有效的方法來返回索引值,其中列表中的第一個匹配是在字符串中進行的。例如上例中指數值爲16

有什麼建議嗎?

回答

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 
+0

完美地工作,謝謝。 – Kudrllr

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 
+0

同樣完美的作品,謝謝你了。 – Kudrllr

0

試試這個:

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

專門針對Python 2 – idjaw

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

我們歡迎幫助OP瞭解解決方案的答案。通過添加上下文和解釋可以改進您的答案。 –

+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – andreas

相關問題