2013-08-24 2 views
-1

Так что я знаю, что есть предопределенные функции, но я все еще практикую основы.py3 issue swapping 2 элемента в том же списке

Я хочу сортировать кучу целых чисел в списке от самого низкого до самого большого числа.

Я определил эту функцию:

def swap(a, b): 
    c = a 
    a = b 
    b = c 

    return a, b 

И это то, что пытается им:

def low_to_big_sort(): 

    n = [2, 1, 63, 6, 8, 5, 12] 
    swap(n[0], n[1]) 

    return n 

Возвращает тот же список, как это определено. Что не так в моем коде?

ответ

2

Функция swap ничего не делает, потому что она просто меняет имена без изменения списка.

Вы можете это исправить тремя способами:

  • Canonical Python обменивать с помощью кортеж распаковка:

    n[0], n[1] = n[1], n[0] 
    
  • На самом деле с помощью возвращаемого значения swap:

    n[0], n[1] = swap(n[0], n[1]) 
    
  • Passing в массиве и парой индексов поменяться:

    def swapind(l, a, b): 
        l[a], l[b] = l[b], l[a] 
    
    swapind(n, 0, 1) 
    

Первый способ является наиболее предпочтительным («Pythonic»), как это ясно, что делает операцию.

0

Потому что вам нужно изменить саму list ...

def swap(L, a, b): 
    L[a], L[b] = L[b], L[a] 

n = [2, 1, 63, 6, 8, 5, 12] 
swap(n, 0, 1) 
+0

Ok кортеж распаковка ответил на мой вопрос, спасибо! Еще один вопрос относительно моего обмена. Как я могу сделать itmultifunctional, обменивать целые числа, indecies, строки, каждый из них возможно? – dragons

+0

@ user2710430 вы не ... например, строки и кортежи неизменяемы, поэтому значения обмена в индексах не будут работать (если вы не сделали копию в то, что не было, а затем переделали обратно) –

Смежные вопросы