#arrays #python-3.x #sorting #arraylist #compare-and-swap
#массивы #python-3.x #сортировка #arraylist #сравнение и обмен
Вопрос:
Вот мой код
def wave(arr):
for indx,el in enumerate(arr):
if indx != 0 and indx%2 == 0:
if el[indx] < el[indx-1]:
arr[indx-1], arr[indx]= arr[indx],arr[indx-1]
if el[indx] < el[indx 1]:
arr[indx], arr[indx 1]= arr[indx 1],arr[indx]
return arr
li = [3,5,12,5,3]
print(wave(li))
Логика, которую я использую здесь, заключается в сравнении четного элемента с их побочным элементом и соответствующей замене.
Ответ №1:
Если вы проверите тип вашей el
переменной, вы увидите, что это целое число ( <class 'int'>
). Итак, ваша попытка сделать это так : int[int]
. Это бессмысленно и невозможно в Python.
Вы можете это проверить:
def wave(arr):
for indx, el in enumerate(arr):
print(type(el)) # <class 'int'>
....
Я попытался выяснить ваши ожидания (вы не написали свои ожидания в своем вопросе), и я написал рабочий код с несколькими комментариями.
Код:
def wave(arr):
for indx, el in enumerate(arr):
# If the index is not zero AND the element is even AND element is not the last one
if indx != 0 and indx % 2 == 0 and indx != len(arr) - 1:
if arr[indx] < arr[indx - 1]: # If the left side is greater
arr[indx - 1], arr[indx] = arr[indx], arr[indx - 1]
if arr[indx] < arr[indx 1]: # If the right side is greater
arr[indx], arr[indx 1] = arr[indx 1], arr[indx]
return arr
li = [3, 5, 12, 5, 3]
print(wave(li)) # expected: [3, 5, 12, 5, 3]
li = [3, 5, 12, 15, 3, 8]
print(wave(li)) # expected: [3, 5, 15, 3, 12, 8]
Вывод:
>>> python3 test.py
[3, 5, 12, 5, 3]
[3, 5, 15, 3, 12, 8]