比较两个列表: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)
https://stackoverflow.com/questions/69572444/