如何获取列表中的第一个非空项

时间:2015-03-10 23:25:58

标签: python

我如何抓住以下内容:

l=[None, None, 'hello', 'hello']
first(l) ==> 'hello'

l = [None, None, None, None]
first(l) ==> None

我可以尝试使用列表理解,但如果它没有项目则会出错。

2 个答案:

答案 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