首页 > 解决方案 > 如何将列表与不均匀的列表进行比较

问题描述

概括

比较两个列表:A = [2,3]和,目标是否在 : 中找到不存在B = [[2],[1,2]]的元素: 这里:。AB[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,但是运行此代码时出现错误。任何帮助表示赞赏:)

标签: pythonlist

解决方案


除了@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)

推荐阅读