有两个列表,在python里如何判定其中一个是另一个的子集?比如
>>> A = [2, 3, 4]
>>> B = [0, 1, 2, 3, 4, 5]
>>> A in B
False
因为列表B中的元素都是数字,并没有如A一样的list,所以得到False的结果。其实,两个列表的包含关系,可以用for逐个判定
>>> A = [2, 3, 4]
>>> B = [0, 1, 2, 3, 4, 5]
>>> any([A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)])
True
分析
首先从B的第i个元素开始,提取长度与A等长的子列表,记作C:
B[i:i+len(A)]
C只需要滑过整个B即可,所以i的范围不需要到整个B的长度,只需要到len(B)-len(A)+1,滑动的过程中,逐次比较C是否与A相等,得到True或者False的结果,放入结果列表,比如上面的例子里,这个结果是
[False, False, True, False]
当i为2时,C与A相等。只要有一次匹配相等,就可以判定A是B的子集。用any函数可以实现这种逻辑:只要列表元素至少有一个为
真
就返回True.
>>> any([False, False, True, False])
True
版权声明:本文为pilicurg原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。