python - 如何将列表与不均匀的列表进行比较
问题描述
概括
比较两个列表:A = [2,3]
和,目标是否在 : 中找到不存在B = [[2],[1,2]]
的元素: 这里:。A
B
[3]
问题
我正在尝试比较两个列表并从 A 输出唯一编号。
A = [2,3]
B = [[2],[1,2]]
for x in range(len(A)):
for y in range(len(B)):
for z in range(len(B)):
if A[x] not in B[y][z]:
return x
预期的答案是 3,但是运行此代码时出现错误。任何帮助表示赞赏:)
解决方案
除了@RocketHazmat 很好地解决了您的循环问题之外,多循环方法效率非常低,您需要将 B 的所有元素与 A 的所有元素进行比较。
而是使用set
差异:
from itertools import chain
set(A).difference(chain.from_iterable(B))
输出:{3}
更短更快的变体:
@DaniMasejo 的简短变体:set(A).difference(*B)
这个变体在大型数据集(这里是 1000 个项目的随机数据集)上快约 2 倍:
import random
A = np.random.randint(0,1000, size=1000).tolist()
B = [np.random.randint(1,1000, size=random.randint(1,100)).tolist() for i in range(1000)]
输出:
# set(A).difference(*B)
638 µs ± 1.05 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# set(A).difference(chain.from_iterable(B))
1.16 ms ± 2.72 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
推荐阅读
- ios - iOS 深度链接:从应用商店安装后打开应用
- diagram - 数据流程图辅助
- python - 创建数据索引位置的滑动窗口
- php - Laravel 8:SQL 语法错误;在 whereHas 回调中使用 whereHasMorph
- angular - 如何在 Typescript 中的数组的特定位置附加数据
- python - 如何在 GCP AI Platform (Unified) Notebook 中安装 kite?
- delphi - Delphi排序单链表
- javascript - 我似乎无法弄清楚我的 chrome 扩展可能缺少哪些权限。它可以在开发者模式下工作,但不能在 chrome 商店中使用
- c++ - 使用带有 MPI_Gather 的 std::vector 崩溃,而 c 样式数组工作正常
- c# - 无法将行写入文件“obj\Debug\net5.0\SolutionName.GeneratedMSBuildEditorConfig.editorconfig 超出操作系统最大路径限制