python - Python 检查两个或多个列表是否是 List 的子集
问题描述
我有三个动态生成的列表。其他两个列表是主列表的子集。
list_M = ["A", "B", "C" ,"D", "E"] #main list
list_X = ["A", "C" , "E"] #subset of main list
list_Y = ["A" ,"E"] #subset of both list_X and main_list
我需要做的是检查子列表中的项目是否存在于主列表中,如果它们存在,我想用“YES”替换它们,如果不存在,则用“NO”替换。像这样:
#output
A Yes Yes
B No No
C Yes No
D No No
E Yes Yes
我可以用一堆 for 和 if 语句来做到这一点。但是有没有一种更 Pythonic 的方式可以使用Any
and Replace
。
解决方案
list-comprehensions 是你的朋友:
list_M_x = ['YES' if i in list_X else 'NO' for i in list_M]
list_M_y = ['YES' if i in list_Y else 'NO' for i in list_M]
print(list_M_x) # ['YES', 'NO', 'YES', 'NO', 'YES']
print(list_M_y) # ['YES', 'NO', 'NO', 'NO', 'YES']
正如@tobias_k 在评论中所说,如果列表list_X
和list_Y
很长,您可以通过将它们转换为集合来看到显着的好处,因为集合具有 O(1) 成员资格测试。
推荐阅读
- macos - sed 替换 gmv 引起的异常文件扩展名
- node.js - 如何在更新后的风帆中获取以前的值记录?
- javascript - VueJS 使用带有 NULL 和“未定义”值的道具类型验证?
- python - 我不知道这是动态规划
- vb.net - 通过 LAN 将 vb oledb 与 oracle 连接
- angular - Serve assets of multiple Angular apps from the same server with Nginx
- codeigniter - 使用 codeigniter 从下拉列表中填充输入字段
- node.js - Firestore 触发器功能未登录本地模拟器
- android - lalongooo/VideoCompressor:压缩视频中缺少音频?
- c++ - (C++) 存储 10^80 的 int 值