моя функция подкачки не работает в python

#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]