返回第一项或 None 的 Python 习语

新手上路,请多包涵

我正在调用一堆返回列表的方法。该列表可能为空。如果列表非空,我想返回第一项;否则,我想返回 None 。此代码有效:

 def main():
    my_list = get_list()
    if len(my_list) > 0:
        return my_list[0]
    return None

但在我看来,应该有一个简单的单行成语来做到这一点。在那儿?

原文由 Robert Rossney 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

Python 2.6+

 next(iter(your_list), None)

如果 your_list 可以是 None

 next(iter(your_list or []), None)

Python 2.4

 def get_first(iterable, default=None):
    if iterable:
        for item in iterable:
            return item
    return default

例子:

 x = get_first(get_first_list())
if x:
    ...
y = get_first(get_second_list())
if y:
    ...

另一种选择是内联上述函数:

 for x in get_first_list() or []:
    # process x
    break # process at most one item
for y in get_second_list() or []:
    # process y
    break

为了避免 break 你可以这样写:

 for x in yield_first(get_first_list()):
    x # process x
for y in yield_first(get_second_list()):
    y # process y

在哪里:

 def yield_first(iterable):
    for item in iterable or []:
        yield item
        return

原文由 jfs 发布,翻译遵循 CC BY-SA 4.0 许可协议

最好的方法是这样的:

 a = get_list()
return a[0] if a else None

您也可以在一行中完成,但程序员更难阅读:

 return (get_list()[:1] or [None])[0]

原文由 efotinis 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题