【问题标题】:How to shuffle a list 6 times?如何将列表随机播放 6 次?
【发布时间】:2014-10-17 06:15:22
【问题描述】:

我想将一个列表随机播放 6 次,但在所有 6 次中我都得到相同的结果。谁能帮我找出问题所在?

这是我使用的代码

import random
lis1=[0,1,2,3]
lis2=[]
for i in range(6):
    random.shuffle(lis1)
    lis2.append(lis1)
print lis2

这是我得到的示例结果

[[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0]]

如果我得到混乱的列表,我该如何按升序对它们进行排序?如,我想得到这个 -

[[0,1,2,3],[2,3,1,0],[2,1,3,0],[1,0,3,2]]

进入这个-

[[0,1,2,3],[1,0,3,2],[2,1,3,0],[2,3,1,0]]

【问题讨论】:

标签: python list random-sample


【解决方案1】:

首先,您的代码将lis1 引用重复插入lis2。由于lis1 一直保持不变,所有lis2 元素最终都指向同一个对象。要解决此问题,您需要更改 append() 行,以便每次都复制一份列表:

lis2.append(lis1[:])

现在,要对结果进行排序,只需在循环后调用 sort()

lis2.sort()

【讨论】:

    【解决方案2】:

    尝试一些更简单的东西:

    >>> first = [0,1,2,3]
    >>> jumbled = [random.sample(first, len(first)) for i in range(6)]
    >>> ordered = sorted(jumbled)
    >>> jumbled
    [[0, 3, 2, 1], [1, 0, 2, 3], [0, 2, 1, 3], [0, 1, 2, 3], [0, 2, 3, 1], [0, 3, 2, 1]]
    >>> ordered
    [[0, 1, 2, 3], [0, 2, 1, 3], [0, 2, 3, 1], [0, 3, 2, 1], [0, 3, 2, 1], [1, 0, 2, 3]]
    

    【讨论】:

      【解决方案3】:

      lis1 的存储副本不是实际的lis1 这样做:

      lis2.append(lis1[:])
      

      那么代码将是:

      import random
      lis1=[0,1,2,3]
      lis2=[]
      for i in range(6):
          random.shuffle(lis1)
          lis2.append(lis1[:])
      
      print lis2
      

      输出:

      [[2, 3, 1, 0], [0, 3, 2, 1], [3, 0, 1, 2], [1, 2, 0, 3], [3, 0, 2, 1], [1, 0, 3, 2]]
      

      【讨论】:

        【解决方案4】:
        import random
        lis1=[0,1,2,3]
        lis2=[]
        for i in range(6):
            r = random.randint(0,len(lis1))
            #print(r)
            lis2.append(lis1[r:]+lis1[:r])
        print(lis2)
        print(sorted(lis2))
        

        【讨论】:

        • 这只能产生一小部分排列。
        • 是的,我同意它旋转列表而不是随机播放。我发帖的时候没有注意到。感谢提及
        猜你喜欢
        • 2023-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        相关资源
        最近更新 更多