【发布时间】:2018-05-21 08:00:36
【问题描述】:
最近I asked a question here 我想在更大的列表中找到子列表。我有一个类似但略有不同的问题。假设我有这个列表:
[['she', 'is', 'a', 'student'],
['she', 'is', 'a', 'lawer'],
['she', 'is', 'a', 'great', 'student'],
['i', 'am', 'a', 'teacher'],
['she', 'is', 'a', 'very', 'very', 'exceptionally', 'good', 'student']]
我想使用matches = ['she', 'is', 'student'] 查询它,目的是从查询列表中以相同的顺序获取包含matches 元素的所有子列表。与链接中问题的唯一区别是我想向 find_gappy 函数添加一个 range 参数,这样它就不会检索元素之间的间隙超过指定范围的子列表。例如,在上面的例子中,我想要一个这样的函数:
matches = ['she', 'is', 'student']
x = [i for i in x if find_gappy(i, matches, range=2)]
会返回:
[['she', 'is', 'a', 'student'], ['she', 'is', 'a', 'great', 'student']]
最后一个元素没有出现,因为在句子she is a very very exceptionally good student中,a和good之间的距离超过了范围限制。
这样的函数怎么写?之间的差距
【问题讨论】:
-
是否应该在任何单词之间应用 gappy 限制,或者它是一个集体 gappy 限制 - 即是否应该
['she', 'xxx', 'yyy', 'is', 'a', 'zzz', 'student']匹配,因为最大任意两个词之间的gap是2,但总gap是4。 -
要么扩大范围限制,要么完全删除它——看起来很明显,所以我认为你不能这样做是有原因的?顺便说一句,我和克莱姆的侄女一起上大学!
-
@zwer 间隙限制适用于任何单词之间。这不是一个集体限制。
-
matches的顺序呢?它总是与传递给函数的原始匹配相同吗? -
@PaulaThomas 我侄女不记得你了,你在骂人。 :-D
标签: python python-3.x list pattern-matching sublist