我想要比较两个列表并创建另一个列表作为结果
list1 = [0.5, 1]
list2 = [0.0, 0.4, 0.5, 0.6. 0.75, 0.99, 1]
我想创建第三个列表,其中包含list1
中2个元素之间list2中的所有数字list3 = [0.5, 0.6, 0.75, 0.99, 1]
我试过了:
for i in range(list1[0], list1[1], step):
print i
但我的步骤在每种情况下都不一样,所以它不起作用,我还能尝试什么呢?
干杯!
答案 0 :(得分: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]]
答案 1 :(得分: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
关键字来创建一个匿名函数。 lambda
必须是单个表达式,但幸运的是,在这种情况下,这就是我们所需要的。
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()
是“懒惰的”并返回一个迭代器。