【问题标题】:py3 issue swapping 2 elements in same listpy3问题交换同一列表中的2个元素
【发布时间】:2013-08-24 21:47:32
【问题描述】:

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

我想将列表中的一堆整数从小到大排序。

我定义了这个函数:

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

返回与定义相同的列表。 我的代码有什么问题?

【问题讨论】:

    标签: python python-3.x swap


    【解决方案1】:

    您的 swap 函数什么都不做,因为它只是交换名称而不更改列表。

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

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

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

      n[0], n[1] = swap(n[0], n[1])
      
    • 传入一个数组和一对要交换的索引:

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

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

    【讨论】:

      【解决方案2】:

      因为你需要自己修改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)
      

      【讨论】:

      • Ok tuple unpacking 回答了我的问题,谢谢!关于我的交换的另一个问题。我怎样才能使它多功能,交换整数,indecies,字符串,一切可能?
      • @user2710430 你不......例如,字符串和元组是不可变的,因此索引处的交换值不起作用(除非你将副本复制到不存在的东西 - 然后转换它回来了)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多