#python #list
#python #Список
Вопрос:
пожалуйста, ребята, эта функция предназначена для замены группы элементов в списке, например, первых k элементов на последние k элементов, но я не знаю, как заставить функцию работать
def swap(L, k):
L[len(L)-k:], L[:k] = L[:k], L[len(L)-k:]
тем не менее, когда я запускаю это с помощью doctest, происходит сбой
swap([1, 2, 3, 4, 5, 6],2)
Комментарии:
1. Откуда вы знаете, что это сбой? Вы меняете элементы местами, а затем отбрасываете список.
2. ваш код не сбой, он работает
t=[1, 2, 3, 4, 5, 6]; swap(t,2); print(t)
3. @TeejayBruno Изменение аргумента и его возврат — не лучшая практика. Встроенные методы, такие как
.sort()
, тоже этого не делают.4. Что именно терпит неудачу? Этот код работает именно так, как и предполагалось (при условии, что вы хотели изменить список
L
на месте).5. Что именно вы тестируете с помощью doctest? В вашем коде нет подсказок (
>>>
), поэтому никаких доктестов как таковых нет.
Ответ №1:
Исправьте индексы, верните список из метода и распечатайте полученный список:
def swap(L, k):
return L[(-k):] L[k:(-k)] L[:k]
lst = swap([1, 2, 3, 4, 5, 6], 2)
print(lst)
# [5, 6, 3, 4, 1, 2]
Обратите внимание, что исходный список не изменяется — возвращается другой список с замененными элементами.
Комментарии:
1. Скобки вокруг
-k
также являются избыточными2. @wjandrea Скобки вокруг
-k
не нужны. Я добавил их для удобства чтения.
Ответ №2:
Функция работает отлично, но у вас нет других ссылок на список, который вы передаете, поэтому он отбрасывается. Просто сохраните список с именем, прежде чем передавать его.
Кстати, len(L)
это не нужно.
def swap(L, k):
"""
>>> lst = [1, 2, 3, 4, 5, 6]
>>> swap(lst, 2)
>>> lst
[5, 6, 3, 4, 1, 2]
"""
L[-k:], L[:k] = L[:k], L[-k:]
Ответ №3:
def swap(L, k):
J = L[:k]
L[:k] = L[-2:]
L[-2:] = J
P = [1,2,3,4,5,6]
swap(P,2)
# P ==[5, 6, 3, 4, 1, 2]