我必须检查list1是否包含在list2中。它还应该检查它是否也按该顺序出现在列表中。如果它是真的,那么它应该返回真和假
def check(lst1, lst2):
for x in lst1:
for y in lst2:
xx = lst1.sort()
yy = lst2
if xx != yy:
return False
else:
return True
我把自己和for循环搞混了,而且,我不知道从这里到哪里去修复我的代码。请指点一下?
它应该做什么的例子:
check([4,0],[9,1,4,6,8,9])
True
check([1,2],[2,3,1])
False
你可以从这样开始:
查看lst1是否包含在lst2忽略顺序中。如果一个列表包含在另一个列表中,则可以执行以下操作:
最初我声明第一次检查与第二次检查无关,但是如果lst1的第一个元素不在lst2中,则必须正确处理
ValueError
。编辑: 顺便说一句,我比较了我的代码版本和yan的代码版本,在几乎所有的用例下,我的代码版本都要快得多,特别是如果len(lst1)更大(比yan的实现速度高出200倍)。尝试使用
timeit
模块。为了解释它是如何工作的,
ii = lst2.index(lst1[0])
在lst2
中找到与lst1
的第一个元素匹配的索引。如果lst2
中缺少该项,它将捕获ValueError
,并返回False
。如果该元素确实存在,lst2[ii:ii+len(lst1)] == lst1
将所有lst1
与从匹配元素开始并获取下一个len(lst)
元素的lst2
子列表进行比较。我以为这个问题需要递归地解决,所以我做到了:
编辑:
简要说明:
首先,我们检查要查找的列表是否为空(这在我们开始调用自己时很重要),因为所有列表中都有空列表,所以我们返回True。然后我们试着在列表中找到我们要查找的第一项。如果我们找到了它,我们会再次调用函数,但是稍微改变一下参数:我们已经看了“针”的第一项,并在“草堆”中看到了它。所以现在我们需要检查“针”的剩余部分是否在“干草堆”的剩余部分。因此,我们只对两个列表的其余部分再次调用该函数。针的剩余部分是除了第一个元素以外的所有东西,而干草堆的剩余部分则是我们找到的那个之后的所有物品。如果我们到了第一个列表为空的地步,那就意味着我们在大海捞针中找到了它。如果我们得到一个异常,我们正在寻找的东西找不到,所以我们返回False,它在调用堆栈中冒泡并返回。
相关问题 更多 >
编程相关推荐