py3问题交换相同列表中的2个元素

时间:2013-08-24 21:47:33

标签: python python-3.x swap

所以我知道有预定义的功能,但我仍在练习基础知识。

我想在列表中从最低到最大数字排序一堆整数。

我定义了这个功能:

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 个答案:

答案 0 :(得分:2)

您的swap函数无效,因为它只是在不更改列表的情况下交换名称。

您可以通过三种方式解决此问题:

  • 使用元组解包进行规范Python交换:

    n[0], n[1] = n[1], n[0]
    
  • 实际上使用swap的返回值:

    n[0], n[1] = swap(n[0], n[1])
    
  • 将数组和一对索引传递给swap:

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

第一种方式是最优选的(“Pythonic”),因为很清楚操作是做什么的。

答案 1 :(得分: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)