我怎样才能将列表改组为这条规则?
How could I shuffle a list to this rule?
我正在尝试制作一个算法来打乱列表,然后根据此规则制作一个包含所有组合的新列表:
您只能交换一对。例如:
array = [1, 2, 3]
[3, 2, 1] #number at index 0 switched with number at index 2
有想过怎么写吗?
编辑:
Saschas 代码运行良好。我在问问题之前写了这段代码:
sols = []
for i in range(len(a)):
for j in range(len(a)):
a[i] = a[j]
a[j] = a[i]
sols_perm.append(a)
我知道由于无序对,我会在列表中得到一些相同的元素,但它只是创建了一个充满相同元素的列表。有什么想法吗?
sols = []
for i in range(len(array)):
for j in range(i+1, len(array)): # symmetry-reduction -> ordered pairs
sol = array[:] # copy list
sol[i], sol[j] = sol[j], sol[i] # swap
sols.append(sol)
尝试以下功能:
def swap(inlist):
n = len(inlist)
res = [x for x in inlist]
for i in range(n):
for j in range(i+1, n):
tmp = res[i]
res[i] = res[j]
res[j] = tmp
return res
我正在尝试制作一个算法来打乱列表,然后根据此规则制作一个包含所有组合的新列表:
您只能交换一对。例如:
array = [1, 2, 3]
[3, 2, 1] #number at index 0 switched with number at index 2
有想过怎么写吗?
编辑: Saschas 代码运行良好。我在问问题之前写了这段代码:
sols = []
for i in range(len(a)):
for j in range(len(a)):
a[i] = a[j]
a[j] = a[i]
sols_perm.append(a)
我知道由于无序对,我会在列表中得到一些相同的元素,但它只是创建了一个充满相同元素的列表。有什么想法吗?
sols = []
for i in range(len(array)):
for j in range(i+1, len(array)): # symmetry-reduction -> ordered pairs
sol = array[:] # copy list
sol[i], sol[j] = sol[j], sol[i] # swap
sols.append(sol)
尝试以下功能:
def swap(inlist):
n = len(inlist)
res = [x for x in inlist]
for i in range(n):
for j in range(i+1, n):
tmp = res[i]
res[i] = res[j]
res[j] = tmp
return res