如何检查列表中所有可能的数字组合?

时间:2019-11-06 10:12:34

标签: python-3.x

让我们假设我有一个很长的列表,其中每个子列表都是两个不同数字的组合。 示例:

[ [1,6], [7,3], [11,2], [6,3], [8,1], [4,11] ]

我还输入了三个数字:A,B和C(例如6、1、3)。

现在,我要检查A号是否同时具有B和С号。对于上面的示例,答案是肯定的,因为数字(6)与B(1)-[1,6]一对,而对С(3)-[6,3]也有一对。

由于所有这些数字都可以通过任何方式相互组合,所以我现在使用的是肮脏的蛮力解决方案:

if ([A, B] in list and [A, C] in list) or
([A, B] in list and [C, A] in list) or 
([B, A] in list and [A, C] in list) or 
([B, A] in list and [C, A] in list) or...

必须有更好的方法!

1 个答案:

答案 0 :(得分:0)

如何通过列表理解来过滤列表中的组件?

>>> target_list = [ [1,6], [7,3], [11,2], [6,3], [8,1], [4,11] ]
>>> A, B, C = 6, 1, 3
>>> filtered_list = [l for l in target_list if A in l and (B in l or C in l)]
>>> filtered_list
[[1, 6], [6, 3]]
>>> if len(filtered_list) == 2:
...     do_something()