【问题标题】:Exchange position of 2 array elements in Python在Python中交换2个数组元素的位置
【发布时间】:2012-01-30 22:23:22
【问题描述】:

有什么简单的方法可以交换数组中 2 个元素(或者更好的是,n 个元素)的位置吗?

我想出了一些代码,但是看起来很丑,性能应该有点差:

chromo = [[1,2], [3,4], [5,6]]

gene1Pos = random.randrange(0, len(chromo)-1, 1)
gene2Pos = random.randrange(0, len(chromo)-1, 1)
tmpGene1 = chromo[gene1Pos]
tmpGene2 = chromo[gene2Pos]
chromo[gene1Pos] = tmpGene2
chromo[gene2Pos] = tmpGene1

这应该可以,但是不好。更好的方法是像 random.shuffle 这样的例程,但不是混合所有内容,而是混合 n 个元素。你有什么想法吗?

【问题讨论】:

    标签: python arrays random shuffle


    【解决方案1】:

    试试

    >>> chromo[gene1Pos], chromo[gene2Pos] = chromo[gene2Pos], chromo[gene1Pos]
    

    所以您只需要确保您拥有正确的 genXPos

    【讨论】:

    【解决方案2】:

    只需将 Python 中用于交换变量的正常机制与切片/切片赋值相结合即可。

    >>> a = [1, 2, 3, 4, 5]
    >>> a[2:3], a[4:5] = a[4:5], a[2:3]
    >>> a
    [1, 2, 5, 4, 3]
    

    【讨论】:

      【解决方案3】:

      你所做的并没有错。不过,您可以通过删除其中一个临时变量来简化它。要交换 ab,您只需要这样:

      tmp = a
      a = b
      b = tmp
      

      【讨论】:

      • 不,不,不!这不是你想的 Python!在 Python 中,元组解包和元组赋值允许您编写:a,b = b,aDone!
      • @PaulMcGuire 同意。请参阅我对您的回答(我赞成)重新性能的评论(a,b=b,a 是最快的)。但是通过 temp 进行交换是并且永远将是保存在任何程序员工具箱中的经典微算法。
      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多