【发布时间】:2020-11-18 17:50:39
【问题描述】:
假设我有一个从 1 到 10 的数字列表。我想知道这些小于 1000 的数字的平方,而不关心实际数字。这是我正在尝试实现的一个简化示例,我想知道单个列表理解是否可以做到这一点。
我可以这样做:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squares_under_1000 = [n ** 2 for n in numbers if n ** 2 < 1000]
print(squares_under_1000) # Output: [1, 4, 27, 256]
问题是我需要使用两次实际的平方计算 - 我需要重复自己,如果操作很慢,那就是......慢。
我知道我也可以使用filter:
squares_under_1000 = list(filter(lambda sq: sq < 1000, [n ** 2 for n in numbers]))
但我的意思是不要以另一种方式这样做,因为我已经知道该怎么做。相反:是否可以使用列表推导来计算一个值并在我的推导的if 部分中使用该计算值?
【问题讨论】:
-
仅供参考,
n ** n不是平方运算。 -
@chepner 你是对的 - 这是
n^n,我的错。