Python 判断列表的包含关系

  • Post author:
  • Post category:python


有两个列表,在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


原文链接:http://www.lfhacks.com/tech/python-inclusion-list



版权声明:本文为pilicurg原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。