Нет такой большой разницы. Одно отличие состоит в том, что ваш l oop в последних значениях выполняет итерацию по элементу вне диапазона, а их решение повторяется до последних трех элементов: например, с этим nums=[1,4,6,1,2,3]
и seq=[1,2,3]
, i
идет принимать значения от 0
до len(nums)-1
, то есть в данном случае i=[0,1,2,3,4,5]
, и итерации вашего решения будут примерно такими:
i=0
nums[i:i+3]=nums[0:3]->[1,4,6]
nums[0:3] == seq ->False
...
i=1
nums[i:i+3]=nums[1:4] ->[4,6,1]
nums[i:i+3] == seq ->False
....
#and so on
Но после последних трех элементов (i=len(nums)-3
), нет смысла продолжать сравнение, потому что списки будут иметь разную длину:
i=len(nums)-3=3
nums[i:i+3]=nums[3:6] ->[1,2,3]
nums[i:i+3] == seq ->True
return True
...
i=len(nums)-2=4
nums[i:i+3]=nums[4:7] ->[2,3]
nums[i:i+3] == seq ->False
...
i=len(nums)-1=5
nums[i:i+3]=nums[5:8] ->[3]
nums[i:i+3] == seq ->False
...
#End loop
Так что, возможно, вы могли бы сделать это с range(len(nums)-2)
, последней итерацией i=len(nums)-3
. Другое решение, как я вам объясняю, повторяется до i=len(nums)-3
и сравнивает элемент за элементом:
i=0
nums[i]=nums[0]-> 1
nums[i+1]=nums[1]-> 4
nums[i+1]=nums[2]-> 6
nums[i]==1 and nums[i+1]==2 and nums[i+2]==3 --->False
...
#and so on until i i=len(nums)-3
Короче говоря, различия - это циклы, и вы сравниваете фрагмент за фрагментом, а их решение сравнивает поштучно.