如何使用 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']]
我已经开始学习 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']]