如何使用python将and else语句添加到for循环中的if作为lambda的一部分
Posted
技术标签:
【中文标题】如何使用python将and else语句添加到for循环中的if作为lambda的一部分【英文标题】:How do you add and else statement to an if inside a for loop as part of a lambda using python 【发布时间】:2016-06-07 10:59:30 【问题描述】:我已经开始学习 python 中的 lambda 函数,我喜欢它的强大功能,但是我在 lambda 中使用 if/else 和 for 循环时遇到了困难。
我知道我可以使用以下内容:
def compare(value, compare_value):
if value < compare_value:
return [value, True]
else:
return [value, False]
number_list = [0, 1, 2, 3]
compare_number = 2
print [compare(number, compare_number) for number in number_list]
这我知道会打印:
[[0, True], [1, True], [2, False], [3, False]]
我也知道我可以使用这个获得相同的打印输出:
compare = lambda value, compare_value: [value, True] if value < compare_value else [value, False]
number_list = [0, 1, 2, 3]
compare_number = 2
print [compare(number, compare_number) for number in number_list]
我想知道我是否可以将所有迭代和比较放在一行中。下面的代码我试过了,python不喜欢。
number_list = [0, 1, 2, 3]
compare_number = 2
print [[number, True] for number in number_list if number < compare_number else [number, False]]
【问题讨论】:
天哪。请不要使用lambda
或“单线”。那将是臭名昭著的。只需使用函数def
inition。
我从是否可能的角度提出更多要求,而不是我需要这样做。可以一行完成吗?
这里的问题是这样做并没有任何好处。有一些格式指南/约定可以将一行的大小减少到 79 个字符,并且尝试将所有内容放在一行中不仅违反了这一点,而且会使您的代码更加难以阅读。
【参考方案1】:
您需要在for number in number_list
之前完成if
表达式以使其语法有效
>>> print [[number, True] if number < compare_number else [number, False] for number in number_list]
[[0, True], [1, True], [2, False], [3, False]]
也就是说,与您的原始代码相比,这不是很可读。
只要你有一个看起来像这样的 if 语句
if something:
return True
else:
return False
考虑用(例如)替换它
return something == True
如果它已经是布尔类型,则只需 return something
。
在您的情况下,您可以将表达式简化为
print [[number, number < compare_number] for number in number_list]
【讨论】:
我通常只会用布尔表达式替换 if 语句,但这只是我想出的一个示例,用于表示无法以这种方式完成的类似问题。你的第一个代码块正是我要找的。span> 【参考方案2】:compare = lambda value, compare_value: [value, value < compare_value]
和
print [[number, number < compare_number] for number in number_list]
加上彼得吉布森所说的。
【讨论】:
【参考方案3】:或者您可以只使用列表推导:
>>> [[n, n < compare_number] for n in number_list]
[[0, True], [1, True], [2, False], [3, False]]
如果要返回布尔值以外的值,请使用三元:
>>> [[n, 'a' if n < compare_number else 'b'] for n in number_list]
[[0, 'a'], [1, 'a'], [2, 'b'], [3, 'b']]
【讨论】:
以上是关于如何使用python将and else语句添加到for循环中的if作为lambda的一部分的主要内容,如果未能解决你的问题,请参考以下文章
将 lapply 与 for 和 if..else 语句结合使用,将条件列添加到多个数据帧
如何在 javascript 中的 if/else 中添加“和”