Прежде всего, если вы собираетесь много искать, вы должны использовать набор или словарь вместо списка, если вам не нужно поддерживать порядок. Поиск по спискам - O (n), и я знаю, что кортежи / словари намного лучше. Я считаю, постоянный поиск времени.
Во-вторых, вы правы в отношении try / catch, вам следует использовать это, если вы ожидаете, что в большинстве случаев WILL будет совпадением.
В-третьих, я думаю, что вы ищете,
if user_key in entity.string_list:
idx = entity.string_list.index(user_key)
РЕДАКТИРОВАТЬ: вот две ссылки, которые проливают некоторый свет на гарантии времени выполнения. Очень хороший материал, который нужно знать при кодировании, чтобы автоматически поддерживать время выполнения
http://wiki.python.org/moin/TimeComplexity
http://bayes.colorado.edu/PythonIdioms.html
EDIT2: добавлен метод с использованием словарей.
## pre-initialize a dictionary
lookupdict = dict((val, i) for i, val in enumerate(entity.string_list))
# loop over user_key
idx = lookupdict.get(user_key, None)
if idx is None:
continue
## do something with idx