Shuffling a list of objects

后端 未结 23 2018
眼角桃花
眼角桃花 2020-11-22 00:29

I have a list of objects and I want to shuffle them. I thought I could use the random.shuffle method, but this seems to fail when the list is of objects. Is the

23条回答
  •  执笔经年
    2020-11-22 01:04

    As you learned the in-place shuffling was the problem. I also have problem frequently, and often seem to forget how to copy a list, too. Using sample(a, len(a)) is the solution, using len(a) as the sample size. See https://docs.python.org/3.6/library/random.html#random.sample for the Python documentation.

    Here's a simple version using random.sample() that returns the shuffled result as a new list.

    import random
    
    a = range(5)
    b = random.sample(a, len(a))
    print a, b, "two list same:", a == b
    # print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False
    
    # The function sample allows no duplicates.
    # Result can be smaller but not larger than the input.
    a = range(555)
    b = random.sample(a, len(a))
    print "no duplicates:", a == list(set(b))
    
    try:
        random.sample(a, len(a) + 1)
    except ValueError as e:
        print "Nope!", e
    
    # print: no duplicates: True
    # print: Nope! sample larger than population
    

提交回复
热议问题