【发布时间】:2018-05-23 06:28:15
【问题描述】:
我有以下清单:
a = [1, 2, 5, 4, 3, 6]
我想知道如何在列表中一次随机交换任意两个值,而不管列表中的位置如何。以下是我正在考虑的一些示例输出:
[1, 4, 5, 2, 3, 6]
[6, 2, 3, 4, 5, 1]
[1, 6, 5, 4, 3, 2]
[1, 3, 5, 4, 2, 6]
有没有办法在 Python 2.7 中做到这一点?我现在的代码是这样的:
import random
n = len(a)
if n:
i = random.randint(0,n-1)
j = random.randint(0,n-1)
a[i] += a[j]
a[j] = a[i] - a[j]
a[i] -= a[j]
然而,我目前拥有的代码的问题是,如果有足够的交换和迭代,它开始将 all 值设置为零,这是我不想要的;我希望数组中的值保持不变,但执行 2opt 之类的操作,每次交换时只切换两个。
【问题讨论】:
-
你不能使用额外的变量
temp = a[i] ; a[i] = a[j] ; a[j] = temp吗? -
@furas 在 Python 中不需要,
a[i], a[j] = a[j], a[i]可以。 -
@mkrieger1 是的,我知道 :) 带有
temp的版本对于初学者来说应该更明显,所以我从temp开始。
标签: python python-2.7 list