例如,元组是 (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).. => 错了。
内置序列类型的文档说该in操作可以进行子序列检查,但仅限于某些类型:
笔记:
虽然 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)]
真的