首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中比较两个列表(list2和list1,并找出有多少元素是<= list1)

如何在Python中比较两个列表(list2和list1,并找出有多少元素是<= list1)
EN

Stack Overflow用户
提问于 2022-04-20 12:59:36
回答 2查看 874关注 0票数 1

我一直在比较两个列表,找出有多少元素是<= list1 (list2 <= list1),并将结果放入new_list。

下面是测试用例:

测试用例1:

代码语言:javascript
运行
复制
list1 = [1, 4, 2, 4]
list2 = [3, 5]
Output: [2, 4]

解释:

  1. For list2 = 3,在list1中有两个元素(list1 =1和list12 = 2),它们是<= list2.

  1. For list21 = 5,我们在list1中有4个元素(list1 = 1,list11 = 4,list12 = 2,list13 = 4),它们是<= list21

测试用例2:

代码语言:javascript
运行
复制
list1 = [1, 2, 3]
list2 = [2, 4]
Output: [2, 3]

解释:

  1. For list2 = 2,在list1中有两个元素(list1 =1和list11 = 2),它们是<= list2.

  1. For list21 = 4,在list1中有3个元素(list1 = 1,list11 = 2,list12 = 3),它们是<= list21

我想用两个指针进行求解,在list1中放置第一个指针,在list2中放置第二个指针,然后比较两个列表中的每个元素,每次看到list2中的元素小于list1中的元素时,就增加一个计数。这个实现对我来说有点挑战性,我确定它是否起作用。

我在这里写的是:

代码语言:javascript
运行
复制
def counts(list1, list2):
   new_list = []
   count = 0
   a = list1[0]
   b = list2[0]
   i, j = 1, 1

   while a or b:
     if a <= b:
        count += 1
        new_list.append(a[i])
        i += 1

   return new_list
EN

回答 2

Stack Overflow用户

发布于 2022-04-20 13:05:43

最简单的方法是:

代码语言:javascript
运行
复制
import numpy as np
[(np.array(list1)<=l2).sum() for l2 in list2]

但如果你需要更有效的解决方案,就让我知道

票数 1
EN

Stack Overflow用户

发布于 2022-04-20 13:53:45

您可以对输入列表进行排序。然后进行二进制搜索(从std库中提取bisect.bisect_right),得到list2中值在list1中的插入位置。该职位最终会告诉您,有多少值小于list2中项的值。

代码语言:javascript
运行
复制
from bisect import bisect_right # For binary search.

srt_l1 = sorted(list1) # NlogN
srt_l2 = sorted(list2) # MlogM

out = [bisect_right(srt_l1, val) for val in srt_l2] # MlogN

这给O(NlogN + MlogM)带来了时间复杂性,增加了N+M的空间(尽管您可以使用list.sort进行就地排序)。以上建议的答案具有O(N*M)的时间复杂性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71940117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档