首页 > 解决方案 > 将列表中的条目与另一个列表进行比较

问题描述

使用 Python 3.9.5

a=['Apple', 'Orange', 'peaches']

b=[['Lettuce', 'Apple', 'eggs'],['potato', 'tomato', 'pepper']]

我想比较 a 到 b 中的任何值,如果有匹配继续到下一个列表(我的程序生成关键词列表)我想将初始列表“a”与我拥有的列表进行比较,如果有接下来进行匹配,如果没有匹配,则执行打印该列表之类的操作。

这是我尝试过的,但不起作用

for i in b:
   if any(x in a for x in [b, c]):
      continue 
   else:
       print(#the current sublist)

我想说,对于整数,此代码有效,但对于列表或字符串则无效,感谢反馈

标签: pythonlistgenerator

解决方案


我不知道你在哪里得到变量c。只需替换此行即可。

从:

if any(x in a for x in [b,c]):

至:

if any(x in a for x in i):

的值i是其中的每个子列表,b因此['Lettuce', 'Apple', 'eggs']您的算法迭代子列表中的每个项目并检查也在a.


这是对您的算法的改进。目前,您的算法运行的时间复杂度为O(z * y * x)

  • x = 长度a
  • y = 长度b
  • z = 中每个子列表的平均长度b

与其总是遍历列表a,不如将其设置为一个哈希表,例如设置,这将使搜索从线性提高O(x)到常量O(1)

a_set = set(a)

for i in b:
   if any(x in a_set for x in i):
       # Do something or just continue
      continue 
   else:
       print(i)

这会将时间复杂度提高到O(z * y). 作为比较,如果我们有 20 个元素a,10个元素b,并且在 的每个子列表中平均有 3个元素b,那么之前使用列表的算法a将运行 3 * 10 * 20 总共 600 次迭代,比较一个集合a这只会运行 3 * 10 总共 30 次迭代。


推荐阅读