Python::如何找出元组的子元组在元组中?

구마왕*_*구마왕 4 python tuples

例如,元组是 (1,0,1,1,1,0) 而子元组是 (1,0)

按升序,如何找出这个子元组在元组中?

是否只能通过迭代进行一一比较?

前任。( 1,0 ,1,1,1,0) = ( 1,0 , *, *, *, *) 所以子元组 (1,0) 在元组中!

cf 我不需要像这样知道 (1,0) 在 (1,0,1,1,1,0) 中:

(1,0,1,1, 1,0 ) = ( *, *, *, *, 1,0 ) 所以 (1,0) 在 (1,0,1,1,1,0).. => 错了。

Ada*_*elm 5

内置序列类型的文档说该in操作可以进行子序列检查,但仅限于某些类型:

笔记:

  1. 虽然 in 和 not in 操作在一般情况下仅用于简单的包含测试,但一些专门的序列(例如 str、bytes 和 bytearray)也将它们用于子序列测试:

    >>> "gg" in "eggs" True

因此,如果您的数据只是 0 到 255 之间的整数,您可以转换为字节来检查:

>>>bytes((1,0)) in bytes((1,0,1,1,1,0)) True

对于其他类型的数据,这个表达式是一种单行迭代方式:

A = ('L', 'R') B = ('L', 'R', 'L', 'L', 'L', 'R') any(A == B[i:len(A) + i] for i in range(len(B) - len(A) + 1)) True

...虽然也许将它写在 for 循环中会更容易阅读。


如果 (1, 0) 出现在第二个元组中的任何位置,这些方法将捕获它,因此您标记为错误的示例将被匹配。如果您只想匹配从第二个元组中的第一个条目开始的第一个元组,那么也许您可以进行切片和比较:

>>> A = (1, 0)

>>> B = (1, 0, 1, 1, 1, 0)

>>> A == B[:len(A)]

真的