Вы изменяете список, перебирая его, что приведет к нежелательному поведению.
Если мы делаем print(list3)
каждый раз, когда меняем число, мы можем видеть, что происходит со списком во время цикла,
После проверки первого числа в списке, мы видим, что это 4, который следует поменять местами. Список был [4, 2, 3, 5, 6]
и теперь [2, 4, 3, 5, 6]
.
Давайте перейдем ко второму числу в списке. Поскольку вы изменили исходный список, второе число теперь равно 4, которое будет заменено следующим номером.
Это то, что программа печатает после каждого обмена:
[2, 4, 3, 5, 6]
[2, 3, 4, 5, 6]
[2, 3, 5, 4, 6]
[2, 3, 5, 6, 4]
Ваш номерчетверка перемещается на следующее место в списке, после чего проверяется снова.
Способ решить эту проблему - создать новый список, а не изменять исходный список. Как то так:
def swaplist(list1,list2):
# Make a copy of the original list so we don't modify it.
# Use a more verbose name for the list so it's clear what the purpose is
result_list=list2.copy()
# Use enumerate to get both the index (i), as well as the list item in one go.
for i, item in enumerate(list2):
if ('s'+str(item)) in list1:
# Swap the values using the original list as source.
result_list[i],result_list[i+1]=list2[i+1],list2[i]
return result_list