【问题标题】:How to determine if a tuple is a slice of another tuple (not only a subset!) [duplicate]如何确定一个元组是否是另一个元组的一个切片(不仅仅是一个子集!)[重复]
【发布时间】:2020-06-26 10:34:16
【问题描述】:

是否有一种 Pythonic 方法来确定一个元组是否是另一个元组的切片(而不仅仅是一个子集)?

例如,如果我有以下元组:

t1 = (2, 3, 4)
t2 = (1, 2, 3, 4, 5)
t3 = (3, 4, 2, 5)

那么 t1 是 t2 的一个切片,但只是 t3 的一个子集。我正在寻找类似“t1 in t2”的东西。一个元组沿另一个元组的基于窗口的移动是“可实现的”,但可能有一种我不知道的更有效的方法。

【问题讨论】:

  • 从概念上讲,我认为您不会比您建议的“基于窗口的移动”做得更好
  • 这个问题被标记为重复的问题不是这个问题的重复。这个问题是关于提取子模式的。相似但略有不同。
  • 我用 Boyer Moore 做了一个实验,但是,它甚至比链接的类似问题的一个答案中包含的“奖励子查找器”还要慢 - 可能是因为 int 的坏字符表元组不能是数组或列表(这会导致大量内存消耗),但必须是字典。

标签: python tuples slice


【解决方案1】:

将两个元组都转换为字符串,然后使用in 运算符来检查一个是否是另一个的子字符串。

' '.join(map(str, t1)) in ' '.join(map(str, t2))

请注意调用join(). 的字符串中的空格。如果您不包括空格,则可能会发生这种情况:

''.join(map(str, (1, 2, 3))) in ''.join(map(str, (1, 23, 4)))
# 123 in 1234 == True

【讨论】:

  • 这怎么比窗口滑动技术快?
  • 它不是,但它抽象了条件和迭代,如果你愿意的话,它是一种更“优雅”和简洁的单行替代方案。
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2012-08-29
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
相关资源
最近更新 更多