首页 > 解决方案 > 如何检查一个元素是否存在于一组 4 个列表中的 3 个列表中

问题描述

我有 4 个列表,每个列表都有一些元素。我正在尝试再制作 4 个列表,这些列表将告诉每个特定元素显示了多少个列表。所以我的一份清单会告诉我所有 4 个原始清单中的元素。另一个会告诉我哪些元素在 4 个列表中的 3 个中。一个元素在列表中出现多少次并不重要,重要的是它在多少个列表中。

这对于非常长的 if 语句是可行的,a-la

if ((element in list1) and (element in list2) and \
(element in list3) and not (element in list4)) or...

使用每一种组合,但我想要更干净、可能更快的东西。

这大约是我正在使用的:

list1 = [1, 2, 4, 6, 8]
list2 = [1, 2, 4, 7, 8]
list3 = [1, 2, 5, 7, 8]
list4 = [1, 3, 5, 7, 8]

所以你可以看到 1 和 8 在每个列表中,2 出现在三个列表中,等等。

这就是我想要的输出:

in_all_4_lists = [1, 8]
in_3_lists = [2, 7]
in_2_lists = [4, 5]
in_1_list  = [3, 6]

如果原始列表中有任何重复项,则无关紧要,只要该元素存在即可。

解决这个问题的最佳方法是什么?

标签: python

解决方案


使用 acollections.Counter获取列表中出现的次数,然后累积回来,例如:

counts = Counter(el for lst in (list1, list2, list3, list4) for el in set(lst))

这给了你:

Counter({1: 4, 2: 3, 4: 2, 6: 1, 8: 4, 7: 3, 5: 2, 3: 1})

然后:

d = {}
for k, v in counts.items():
    d.setdefault(v, []).append(k)

然后d将是:

{4: [1, 8], 3: [2, 7], 2: [4, 5], 1: [6, 3]}

推荐阅读