【问题标题】:How to get all the values from a list that are smaller or equivalent to another list in python如何从列表中获取小于或等于python中另一个列表的所有值
【发布时间】:2016-03-08 02:03:49
【问题描述】:

我有两个列表:

List1 = [1,5,9,15,17,23]
List2=[1,2,3,8,15,20,29,27,34,38,39,56]

我想比较 List1 和 List2,并希望从 List1 中获取所有值,以及 List2 中小于或等于 List1 中任何值的值。

所以我的结果列表将是 [1,5,9,15,17,23,1,2,3,8,15,20]

【问题讨论】:

  • 你的解决方案是什么?
  • 比较是什么意思?看起来您所做的只是将 list2 连接到 list1 中的值 list2
  • @SayanChowdhury 我想过使用嵌套循环。但这不是我想走的路
  • @AChampion:你可以这么说。我只需要 list2 中的值小于或等于 list1 的值

标签: python


【解决方案1】:
l1  = [1,5,9,15,17,23]
l2 = [1,2,3,8,15,20,29,27,34,38,39,56]

max_val = max(l1)

l1 + [val for val in l2 if val <= max_val]

【讨论】:

  • l1 + [val for val in l2 if val &lt;= max_val] 也可以工作,避免将 list1 与其最大值进行比较。
  • @AChampion - 好点。我不假思索地反射性地提出了答案。编辑答案以使用您的变体。
【解决方案2】:

您可以使用列表推导:

max1 = max(List1)
max2 = max(List2)
newlist = [x for x in List1 if x <= max2] + [x for x in List2 if x <= max1]

您可以将最大调用放入列表理解中,但这会更慢。 (需要为 List1 和 List2 中的每个项目评估一次,而不是只评估一次。)

【讨论】:

    【解决方案3】:

    这将 List1 和 List2 的每个大于 List1 的最大元素的元素 val 连接起来并存储在 List3 中。

    List1 = [1,5,9,15,17,23]
    List2 = [1,2,3,8,15,20,29,27,34,38,39,56]
    
    List3 = List1 + [val for val in List2 if val <= max(List1)]
    

    【讨论】:

    • "比 List1 中的任何值更小或等效"
    • 刚刚更正了。
    【解决方案4】:

    我相信这是一个更好的选择:

    max1 = max(List1)
    result = List1[:]
    
    for x in List2:
        if x <= max1:
            if not x in result:
                result.append(x)
    

    如果您不需要担心更改 List1,您可以使用它而不是复制它的项目。另外,如果你允许重复,你可以去掉 if 中的 x。

    【讨论】:

    • 1.它可能会比列表理解变体慢得多。 2.它没有给出正确的答案
    • 正如我在评论中所说,您可以通过删除在结果中检查 x 的 if 来允许重复。不同的行为旨在作为替代解决方案,删除重复项。但是是的,在更改代码以允许重复之后,我的实现在运行两个解决方案 1MM 次后会慢大约 2 秒。
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多