list1 = [0.5, 1]
list2 = [0.0, 0.4, 0.5, 0.6, 0.75, 0.99, 1]
low, high = list1
lst = [x for x in list2 if low <= x <= high]
print(lst)
只是为了可读性,我们将第一个列表解压缩为两个变量,low
并且high
.
我们使用列表推导从list2
. 列表推导式有一个“过滤器”表达式来选择我们想要的值。
最好直接迭代列表的值,而不是尝试使用range()
将索引获取到列表中。代码更容易编写,更容易阅读,而且速度更快。
列表理解解决方案是在 Python 中解决此问题的推荐方法。
Matthew Graves 建议“你也许可以在这里做一个 Lamba/map 函数”。我将解释如何做到这一点。
filter()
需要你传入一个函数;你可以定义一个函数,或者使用lambda
关键字来创建一个匿名函数。Alambda
必须是单个表达式,但幸运的是,在这种情况下,这就是我们所需要的。
low, high = list1
def check_low_high(x):
return low <= x <= high
lst = list(filter(check_low_high, list2))
lst = list(filter(lambda x: low <= x <= high, list2))
在 Python 2.x 中,您实际上不需要调用list()
,因为filter()
它返回一个列表。在 Python 3.x 中,filter()
是“惰性的”并返回一个迭代器。