Python检查两个或更多列表是否为List的子集

时间:2018-11-16 11:11:59

标签: python python-3.x

我有三个动态生成的列表。其他两个列表是主列表的子集。

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

我需要做的是检查子列表中的项目是否存在于主列表中,如果存在,我想将其替换为“是”,如果不存在,则替换为“否”。像这样:

#output
A  Yes  Yes
B  No   No
C  Yes  No
D  No   No
E  Yes  Yes

我可以用一堆for和if语句来做到这一点。但是还有一种更Python化的方式可以使用AnyReplace

3 个答案:

答案 0 :(得分:3)

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)隶属关系测试,将它们转换为集合可以看到很大的好处。

答案 1 :(得分:1)

您可以这样做:

for l in list_M:
    print(f"{l} {'Yes' if l in list_X else 'No'} {'Yes' if l in list_Y else 'No'}")

答案 2 :(得分:0)

您可以使用方法map (1, 2, 3, 4) => (1, 4, 4, 4) map (1, 2, 3, 4, 5) => cyclical merge error

(方法说明) https://python-reference.readthedocs.io/en/latest/docs/sets/issubset.html

这可以通过将列表强制转换为集合来实现,因为集合仅具有唯一的元素。

这是一个仅通过将列表强制转换为集合即可实现的示例:

print