gpt4 book ai didi

python - 检查列表是否是另一个列表的子列表的程序的断言测试

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:54 26 4
gpt4 key购买 nike

我写了一个小程序,它应该检查给定列表是否是另一个列表的子列表,并返回 TrueFalse:

def is_sublist_of(sublist, given):
""" Returns whether the sublist is part of the given combination.
The order of the sublist must also correspond to the order of the
corresponding part in the given combination."""

return sublist in [given[i:i+len(sublist)] for i in range(0,len(given)-len(sublist))]

此代码是我必须做的作业的一部分,但给定的断言之一是:

simple_list = [1, 2, 3, 4]
for element in simple_list:
assert is_sublist_of([element], simple_list)
assert not is_sublist_of([5], simple_list)

我的程序没有通过这个测试。这是否意味着我的程序在某些特殊情况下不起作用?感谢您调查此事。

最佳答案

。您不会生成所有 子列表:最后一个被省略。如果你给出 given = [1,2,3,4]sublist = [1],一个人会得到:

>>> given = [1, 2, 3, 4]
>>> sublist = [1]
>>> [given[i:i+len(sublist)] for i in range(0,len(given)-len(sublist))]
[[1], [2], [3]]

(他们通常称这为“差一个错误”)。

快速修复是:

return sublist in [given[i:i+len(sublist)] for i in range(0,len(given)-len(sublist)<b>+1</b>)]

因此 +1range(..) 中。

但更优雅的解决方案是:

def is_sublist_of(sublist, given):
n = len(sublist)
return <b>any(</b>sublist == given[i:i+n] for i in range(len(given)-n+1)<b>)</b>

这里算法将从找到这样的列表的那一刻起停止,因此不会生成所有子列表,然后检查其中一个是否匹配。

关于python - 检查列表是否是另一个列表的子列表的程序的断言测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com