python - 如何检查一个元素是否存在于一组 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]
如果原始列表中有任何重复项,则无关紧要,只要该元素存在即可。
解决这个问题的最佳方法是什么?
解决方案
使用 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]}
推荐阅读
- reactjs - React - componentWillReceiveProps 不调用
- c# - 我可以使用 Matlab Coder 为 C# 项目生成 .Net dll 吗?
- java - 将 JAVA 日期更改为 (dd-MMM-yy) 的 ORACLE 日期格式
- jquery - ASP.NET - 在离开页面或切换选项卡之前警告用户未保存的更改
- google-search-appliance - 查找现有 Google Search Appliance 设备的 IP 地址
- python - Keras CNN - 欠拟合或过拟合的模型
- android - 构建 Gradle 需要互联网连接
- mariadb - 将 MariaDB 主服务器复制到 Aurora 从服务器。可能的?
- firebase - 如何在 Firestore 安全规则中使用时间戳
- javascript - 有没有办法从我当前的内容页面阻止包含在母版页中的 JQuery 库?