我敢肯定,有一种更简单的方法可以做到这一点,而这只是我自己没有想到的。
我正在调用一堆返回列表的方法。该列表可能为空。如果列表是非空的,我想返回第一项。否则,我想返回无。此代码有效:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
在我看来,这样做应该有一个简单的一句习惯用语,但是对于我的一生,我无法想到。在那儿?
编辑:
我在这里寻找单行表达式的原因并不是我喜欢令人难以置信的简洁代码,而是因为我不得不编写很多这样的代码:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
我想做的事情肯定可以通过一个函数来完成(可能会做到):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y = first_item(get_second_list())
if y:
# do something with y
我发布了这个问题,是因为我经常对Python中的简单表达式可以做什么感到惊讶,并且我认为如果有一个简单的表达式可以完成此任务,那么编写函数是一件很愚蠢的事情。但是看到这些答案,似乎函数是简单的解决方案。
next(iter(your_list))
,因为如果您向提供第二个参数iter
,则表示第一个参数是可调用的。
next(iter(your_list), None)
而不是first_item(your_list)
假设your_list
不是None
(get_first_list()
并且get_second_list()
必须始终返回可迭代)。