2

我有两个列表我想比较并创建另一个列表作为结果

list1 = [0.5, 1]
list2 = [0.0, 0.4, 0.5, 0.6. 0.75, 0.99, 1]

我想创建第三个列表,其中包含 list2 中 list1 中 2 个元素之间的所有数字

list3 = [0.5, 0.6, 0.75, 0.99, 1]

我试过了:

 for i in range(list1[0], list1[1], step):
    print i

但我的步骤在每种情况下都不相同,所以它不起作用,我还能尝试什么?

干杯!

4

2 回答 2

4

range只返回整数。你可能想要这样的东西:

for i in list2:
    if i > list1[0] and i < list1[1]:
        print i

如果需要,您可能希望更改>>=和。<<=

如果要直接构造 list3 试试:

list3 = [i for i in list2 if i > list1[0] and i < list1[1]]

编辑

为了更好地衡量,您还可以这样做(这就是您在数学上编写它的方式):

list3 = [i for i in list2 if list1[0] < i < list1[1]]
于 2013-05-09T04:28:04.657 回答
1
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()是“惰性的”并返回一个迭代器。

于 2013-05-09T04:32:15.187 回答