如何使用 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

我已经开始学习 python 中的 lambda 函数,我喜欢它的强大功能,但是我在 lambda 中使用带有 for 循环的 if/else 遇到了瓶颈。

我知道我可以使用以下内容:

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]]
compare = lambda value, compare_value: [value, value < compare_value]

print [[number, number < compare_number] for number in number_list]

再加上彼得·吉布森 (Peter Gibson) 所说的话。

您需要在 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]

或者您可以只使用列表理解:

>>> [[n, n < compare_number] for n in number_list]
[[0, True], [1, True], [2, False], [3, False]]

如果您想 return 布尔值以外的值,请使用三元:

>>> [[n, 'a' if n < compare_number else 'b'] for n in number_list]
[[0, 'a'], [1, 'a'], [2, 'b'], [3, 'b']]