【问题标题】:Scramble Python List打乱 Python 列表
【发布时间】:2012-04-03 23:13:35
【问题描述】:

在我问我的问题之前,让我直说......

这不是Does anyone know a way to scramble the elements in a list?Shuffle an array with python, randomize array item order with python 的重复。我会解释为什么...

我想知道如何打乱一个数组,并制作一个新副本。因为random.shuffle() 修改了列表(并返回None),所以我想知道是否有其他方法可以做到这一点,所以我可以做到scrambled=scramblearray()。如果没有内置函数,我可以定义一个函数来执行此操作。

【问题讨论】:

  • 制作一个新副本,然后打乱它有什么问题?
  • @Marcin 就个人而言,我不认为这些答案可以与Shuffle an array with Python上的答案合并
  • 是的,他们可以。他们碰巧也证明了你可以复制一个数组。你没有理由不能自己解决这个问题。
  • 我认为您应该可以制作数组的新副本并使用random.shuffle() 对其进行加扰。它工作正常。如果你不喜欢这种方式,你可能应该清楚地解释为什么你不想要。这将有助于我们理解。

标签: python arrays list random shuffle


【解决方案1】:
def scrambled(orig):
    dest = orig[:]
    random.shuffle(dest)
    return dest

及用法:

import random
a = range(10)
b = scrambled(a)
print a, b

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [6, 0, 2, 3, 1, 7, 8, 5, 4, 9]

【讨论】:

    【解决方案2】:

    使用排序()。它返回一个新列表,如果您使用随机数作为密钥,它将被打乱。

    import random
    a = range(10)
    b = sorted(a, key = lambda x: random.random() )
    print a, b
    

    输出

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [5, 9, 0, 8, 7, 2, 6, 4, 1, 3]
    

    【讨论】:

      【解决方案3】:

      复制数组然后打乱它:

      import random
      
      array = range(10)   
      newarr = array[:] # shallow copy should be fine for this
      random.shuffle(newarr)
      #return newarr if needs be.
      zip(array, newarr) # just to show they're different
      
      Out[163]:
      [(0, 4),
       (1, 8),
       (2, 2),
       (3, 5),
       (4, 1),
       (5, 6),
       (6, 0),
       (7, 3),
       (8, 7),
       (9, 9)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多