【问题标题】:How could I shuffle a list to this rule?我怎么能把一个列表改组到这个规则?
【发布时间】:2017-06-12 16:26:19
【问题描述】:

我正在尝试制作一个算法来打乱一个列表,然后根据这个规则制作一个所有组合的新列表:

您只能交换一对。例如:

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)

我知道由于无序对,我会在列表中获得一些相同的元素,但它只是创建了一个充满相同元素的列表。有什么想法吗?

【问题讨论】:

  • 您的交换错误。您需要一个临时变量(a[i] 在用于设置 a[j] 之前已更改)。我的方法中的代码工作方式不同(python 样式交换)!下次直接加代码!

标签: python arrays algorithm shuffle


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

    试试下面的功能:

    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
    

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2021-09-28
      • 2017-11-14
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多