这是"字符串包含子字符串"问题到(更多)任意类型的概括.
给定一个序列(例如列表或元组),确定另一个序列是否在其中的最佳方法是什么?作为奖励,它应该返回子序列开始的元素的索引:
用法示例(序列中的序列):
>>> seq_in_seq([5,6], [4,'a',3,5,6])
3
>>> seq_in_seq([5,7], [4,'a',3,5,6])
-1 # or None, or whatever
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只是依靠蛮力,它似乎缓慢,丑陋,笨拙.
我有一个对象列表,想要检查列表的一部分是否与特定模式匹配。
考虑以下列表:
l1 = ["foo", "bar"]
l2 = [{1, 2},"foo", "bar"]
l3 = ["foo", "bar", 5]
l4 = [{1,2},"foo", "bar", 5, 6]
Run Code Online (Sandbox Code Playgroud)
["foo", "bar"]在所有不同情况下我将如何匹配序列?
我天真的想法是:
match l4:
case [*_, "foo", "bar", *_]:
print("matched!")
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个SyntaxError: multiple starred names in sequence pattern. 问题是,我不知道有多少元素在该模式的前面和后面。
编辑:我想我需要澄清:"foo", "bar"只是一个更复杂模式的替代品。(我正在使用 AST 对象)