我有三个动态生成的列表。其他两个列表是主列表的子集。
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化的方式可以使用Any
和Replace
。
答案 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_X
和list_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