如何使用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 或“单线”。那将是臭名昭著的。只需使用函数definition。 我从是否可能的角度提出更多要求,而不是我需要这样做。可以一行完成吗? 这里的问题是这样做并没有任何好处。有一些格式指南/约定可以将一行的大小减少到 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 中添加“和”

python while循环

Python 中的线性搜索 - 总是使用 else 语句

在 if/else PHP 语句中使用 'and' 和 'or'

if or/and else if 语句被传递