python - 如何找出一个列表中的元素是否在另一个列表中?

标签 python list elements

<分区>

我有两个列表:

A = [[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12]]
B = [12, 5]

我试图找出 A 中的哪些列表包含 B 中的元素(顺序无关紧要)并删除其余列表。

在这种情况下,答案是:

[[4, 5, 10, 12], [2, 5, 12, 13], [4, 5, 6, 12]]

如果我们改变 B 并使其成为 B = [13],答案将是:

[[2, 5, 13, 14], [2, 5, 12, 13]]

最佳答案

您可以使用 set.issubset 和列表理解,使用 A[:] 将更改原始/列表对象 A:

A = [[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12]]
B = [12, 5]
st = set(B)

A [:] = [sub for sub in A if st.issubset(sub)]

print(A)
[[4, 5, 10, 12], [2, 5, 12, 13], [4, 5, 6, 12]]

对于 B = [13] 也是如此

A = [[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12]]
B = [13]
st = set(B)

A [:] = [sub for sub in A if st.issubset(sub)]

print(A)
[[2, 5, 13, 14], [2, 5, 12, 13]]

set objects

s.issubset(t) s <= t test whether every element in s is in t

对于非常大的 A 或者如果您有内存限制,您可以使用生成器表达式:

A [:] = (sub for sub in A if st.issubset(sub))

如果顺序无关紧要并且可以设置,我建议您从一开始就使用它们。在集合上进行查找会更有效率。

稍微大一点的 A 上的一些时间:

In [23]: A = [[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12],[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12],[2, 5, 13, 14], [4, 5, 10, 12], [2, 9, 10, 11], [2, 5, 12, 13], [4, 5, 6, 12]]

In [24]: B = [12, 5]                                 
In [25]: timeit  filter(lambda x: all(y in x for y in B), A)
100000 loops, best of 3: 9.45 µs per loop

In [26]: %%timeit                                    
st = set(B)
[sub for sub in A if st.issubset(sub)]
   ....: 
100000 loops, best of 3: 3.88 µs per loop
 map(lambda x: not B_set-set(x), A)
In [27]: %%timeit
....: B_set = set(B)
....: map(lambda x: not B_set-set(x), A)
....: 
100000 loops, best of 3: 6.95 µs per loop

如果您已经将元素作为集合存储在 A 中:

In [33]: %%timeit                             
st = set(B)
[sub for sub in A if sub >= st]
....: 
1000000 loops, best of 3: 1.12 µs per loop

关于python - 如何找出一个列表中的元素是否在另一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736063/

相关文章:

javascript - Angular 6 - 是否可以在同一页面上使用两个 Angular 元素组件?

python - 如何在 Python 中生成与给定数据集相关的随机数

python - 如何在python和pygame中获取鼠标输入

python - 通过func发送multi oid到pysnmp

Java创建新对象的性能

arrays - PHP - 删除多维数组中的元素

python - 访问自定义 python 函数所在的文件夹

c# - Linq 在 C# 中的列表中添加列表

python - 在遍历列表范围的循环中删除对象?

javascript - 用于查找标签 ID 和内容 JavaScript 的正则表达式