我敢肯定,有一种更简单的方法可以做到这一点,而这只是我自己没有想到的。
我正在调用一堆返回列表的方法。该列表可能为空。如果列表是非空的,我想返回第一项;否则,我想返回无。此代码有效:
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), None)
如果your_list
可以None
:
next(iter(your_list or []), None)
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
问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:
我有一点奇怪的情况,似乎不允许这个挂钩适合任何广泛建立的CompletableFuture漏洞。 在评估返回布尔值的主要方法中,我希望允许对三个不同方法的调用异步完成。这三个方法中的每一个都可以返回TRUE或FALSE。 如果任何返回FALSE,我希望评估删除余数并简单地返回FALSE值。重点是,它可以是三个中的任何一个,不一定是第一个。 但最重要的是,我需要在实际返回TRUE之前等待所有三个返回
我做了一点实验,发生了一些我认为没有预料到的事情。这个问题是基于递归和第7行注释的返回语句 我的问题是,在使用示例输入“1 9 11 5 6”的测试期间,如果我有返回语句。输出仅为“值1 9 11总计21”,但如果没有return语句,输出为“值1 9 11总计21,值1 9 5 6总计21”。我想知道是否有什么可以解释为什么,我认为return语句会简单地“加速”结束这个方法的递归实例,而不是简
问题内容: 您好,我是python的新手,想知道您是否可以帮我一些忙。我一直在玩这段代码,似乎无法使其正常工作。 现在,isPrime方法的输出如下: 我确定该函数应返回true,然后应打印“是”。我想念什么吗? 问题答案: 您将放弃递归调用的返回值: 您也想传播递归调用的值,包括一条语句: 现在,您的代码将输出:
问题内容: 我有一个功能。,它接受一个整数并返回True或False。 我有10个整数的列表。我想返回列表中的第一个项目(与原始列表的顺序相同),该项目已返回True。 尽可能地Python。 问题答案: next(x for x in lst if matchCondition(x)) 应该可以,但是如果列表中的所有元素都不匹配,它将提高。您可以通过提供第二个参数来抑制这种情况: 如果没有匹配项