【问题标题】:Extracting information from lists从列表中提取信息
【发布时间】:2013-05-09 04:24:40
【问题描述】:

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

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

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

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

我试过了:

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

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

干杯!

【问题讨论】:

  • 你可以在这里做一个lamba/map函数

标签: python list range


【解决方案1】:

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

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

如果需要,您可能希望将 &gt; 更改为 &gt;=&lt; 更改为 &lt;=

如果你想直接构造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]]

【讨论】:

  • 在 Python 中,您不需要使用 and 进行此类测试。您可以直接写list1[0] &lt;= i &lt;= list1[2],它会做正确的事情。
【解决方案2】:
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)

为了便于阅读,我们将第一个列表解压缩为两个变量,lowhigh

我们使用列表推导从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() 是“惰性的”并返回一个迭代器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2021-07-04
    相关资源
    最近更新 更多