我如何抓住以下内容:
l=[None, None, 'hello', 'hello']
first(l) ==> 'hello'
l = [None, None, None, None]
first(l) ==> None
我可以尝试使用列表理解,但如果它没有项目则会出错。
答案 0 :(得分:7)
使用以下内容:
first = next((el for el in your_list if el is not None), None)
这会在your_list
上构建gen-exp,然后尝试检索第一个不是None
的值,其中没有找到值(它是一个空列表/所有值都为None),它返回None
作为默认值(或根据需要更改)。
如果你想将它变成一个函数,那么:
def first(iterable, func=lambda L: L is not None, **kwargs):
it = (el for el in iterable if func(el))
if 'default' in kwargs:
return next(it, kwargs[default])
return next(it) # no default so raise `StopIteration`
然后用作:
fval = first([None, None, 'a']) # or
fval = first([3, 4, 1, 6, 7], lambda L: L > 7, default=0)
等...
答案 1 :(得分:2)
如果我正确理解了这个问题
l = [None, None, "a", "b"]
for item in l:
if item != None:
first = item
break
print first
输出:
a