如何检查列表列表中的位置元素是否不存在于另一个列表列表中

时间:2018-01-09 13:36:50

标签: python list

我正在尝试找到一种可靠的方法来检查list2中是否存在i for i in list1(所有相同长度)中的位置列表元素?

这看起来与我需要的相反:

How to check if one of the following items is in a list?

>>> list1 = [('1', '2', '3'), ('a', 'b', 'c'), ('4', '5', '6')]
>>> list2 = [('a', 'b', 'c'), ('m', 'n', 'b'), ('p', 'q', '6')]
>>> print(any(z in [i[2] for i in list1] for z in [z for x,y,z in list2]))
True

理想情况下,我需要('m','n,'b') list2,因为在'b'的任何第3个元素中找不到list1,所以如何将其隔离出来?

而不是'any'我正在寻找这种伪代码:

print x,y,z from list2 if 'z' is not found in any 3rd position element in all the lists present in "list1"

1 个答案:

答案 0 :(得分:1)

从第一个列表中创建一组所有第三个元素,然后根据集合测试第二个列表中的元组:

library(rbenchmark)
benchmark(prune_cutree_to_dendlist(dend, 5), 
          prune_cutree_to_dendlist2(dend, 5), replications=5)

                                test replications elapsed relative user.self
1  prune_cutree_to_dendlist(dend, 5)            5    0.02        1     0.020
2 prune_cutree_to_dendlist2(dend, 5)            5   60.82     3041    60.643

首先将值再次存储到测试中的效率要高得多,而不是每次都循环遍历所有值。

演示:

third_positions = {t[2] for t in list1}
[t for t in list2 if t[2] not in third_positions]

如果你必须使用>>> list1 = [('1', '2', '3'), ('a', 'b', 'c'), ('4', '5', '6')] >>> list2 = [('a', 'b', 'c'), ('m', 'n', 'b'), ('p', 'q', '6')] >>> third_positions = {t[2] for t in list1} >>> print([t for t in list2 if t[2] not in third_positions]) [('m', 'n', 'b')] ,那么这也是可能的,但是对any() 中的每个元组都会导致list1 的循环,所以O( NM)代替O(N):

list2