用于Python的list.index()函数,当没有find时不会抛出exception
如果该项目不存在,Python的list.index(x)
将引发exception。 有没有更好的方法来做到这一点,不需要处理exception?
如果您不关心匹配元素的位置,请使用:
found = x in somelist
如果你真的在乎,那么使用带有条件expression式的LBYL样式:
i = somelist.index(x) if x in somelist else None
实现你自己的列表索引?
class mylist(list): def index_withoutexception(self,i): try: return self.index(i) except: return -1
所以,你可以使用list和index2,在出错的时候返回你想要的。
你可以像这样使用它:
l = mylist([1,2,3,4,5]) # This is the only difference with a real list l.append(4) # l is a list. l.index_withoutexception(19) # return -1 or what you want
写一个你需要的function:
def find_in_iterable(x, iterable): for i, item in enumerate(iterable): if item == x: return i return None
如果您只需要知道该项目是否存在,而不是索引,则可以用于:
x in yourlist
就在这里。 你可以例如。 做类似这样的事情:
test = lambda l, e: l.index(e) if e in l else None
其工作原理是这样的:
>>> a = ['a', 'b', 'c', 'g', 'c'] >>> test(a, 'b') 1 >>> test(a, 'c') 2 >>> test(a, 't') None
因此,基本上, test()
将返回给定列表(第一个参数) 中的元素 (第二个参数)的索引 , 除非没有find (在这种情况下,它将返回None
,但它可以是任何你认为合适的)。
如果你不关心它在哪里,只有它的存在,然后使用in
运算符。 否则,编写一个重构exception处理的函数。
def inlist(needle, haystack): try: return haystack.index(needle) except ...: return -1
希望这可以帮助
lst= ','.join('qwerty').split(',') # create list i='a' #srch string lst.index(i) if i in lst else None
没有内置的方式来做你想做的事情。
这里有一个好的post可以帮助你: 为什么列表没有像字典那样安全的“get”方法?
我喜欢使用其胶子包的存储模块中的Web2py的 List类。 存储模块提供了类似列表(List)和类似字典(存储)的数据结构,当找不到元素时不会引发错误。
首先下载web2py的源代码 ,然后将gluon包文件夹复制粘贴到python安装的网站包中。
现在试试看:
>>> from gluon.storage import List >>> L = List(['a','b','c']) >>> print L(2) c >>> print L(3) #No IndexError! None
请注意,它也可以像常规列表一样运行:
>>> print L[3] Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> l[3] IndexError: list index out of range