首页 > 解决方案 > 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 的方式可以使用Anyand Replace

标签: pythonpython-3.x

解决方案


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_Xlist_Y很长,您可以通过将它们转换为集合来看到显着的好处,因为集合具有 O(1) 成员资格测试。


推荐阅读