python - 将列表中的条目与另一个列表进行比较
问题描述
使用 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)
我想说,对于整数,此代码有效,但对于列表或字符串则无效,感谢反馈
解决方案
我不知道你在哪里得到变量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 次迭代。
推荐阅读
- c# - 有没有办法在不解压缩的情况下打开 zip 文件中的文件(c#)
- c# - 可以为 .NET5 控制台应用程序禁用 ETW 处理吗?
- sympy - 如何使用 sympy 仅获得理性而非浮点结果
- sql - 查找没有子查询的最大 sID
- abap - 发货时如何去掉批号?
- c++ - 格式化双精度而不损失精度,但位数最少
- google-cloud-platform - 从 Google 的 Secret Manager 获取 SSH 私钥后无法正常工作
- visual-studio - SpecFlow 绑定在更新后保持部分白色
- typescript - 如何防止使用其中一种类型的可选属性时出错
- angular - 如果模板包含 *ngIf,Angular 自定义结构指令无法重建 ViewContainer