2013-08-24 89 views
-1

所以我知道有預定義的功能,但即時通訊仍然在實踐基礎知識。py3問題交換同一列表中的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函數什麼都不做,因爲它只是在不更改列表的情況下交換名稱。

您可以通過三種方式解決這個問題:

n[0], n[1] = n[1], n[0] 
  • 實際使用從swap返回值:

    n[0], n[1] = swap(n[0], n[1]) 
    
  • 使用 元組拆包

    • 典型的Python交換

    • 傳在陣列和一對索引的交換:

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

    第一種方法是最優選的(「Python化」),因爲它是清楚的操作正在做什麼。

    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

    好吧元組拆包回答我的問題,謝謝! 關於我的交換還有一個問題。 我怎樣才能使它多功能,交換整數,indecies,字符串,everythin可能? – dragons

    +0

    @ user2710430你不會......例如,字符串和元組是不可變的,因此索引處的交換值將不起作用(除非您將某個副本轉換爲不是的東西 - 然後將其轉換回來) –