如果没有预期匹配,如何正确检查列表的匹配?

Wil*_*ran 0 python google-app-engine exception-handling exception list

Python习语和语法的新手.我有一个数据存储StringListProperty,用于保存用户密钥.对于大多数实体,此属性将具有0-10个键,有时甚至更多.我需要检查属性是否有密钥,最常见的是没有匹配.

if entity.string_list.index(user_key) is not None:
  # ....
Run Code Online (Sandbox Code Playgroud)

当没有匹配的密钥时,这会抛出错误.我可以捕获异常,但我怀疑我没有正确理解如何检查列表中的匹配.

mil*_*man 5

首先,如果您要进行大量搜索,除非需要维护订单,否则应使用集合或字典而不是列表.列表上的查找是O(n),我知道元组/字典要好得多.我相信不断的时间查找.

其次,你说得对try/catch语句,你应该使用,如果你预期大部分的时间有WILL是一个匹配.

第三,我认为你在寻找,

if user_key in entity.string_list:
    idx = entity.string_list.index(user_key)
Run Code Online (Sandbox Code Playgroud)

编辑:这里有两个链接,阐明运行时保证.编码时要非常好的东西,以便自动保持运行时自动停机
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
Run Code Online (Sandbox Code Playgroud)