Random without repetition in Python

前端 未结 3 1220
遥遥无期
遥遥无期 2020-12-12 03:50

I want to write a program that displays all the elements of a list in random order without repetition. It seems to me that it should work, but only prints those elements wi

相关标签:
3条回答
  • 2020-12-12 04:10

    Instead of random.choice within the for loop, use random.shuffle here.

    This way, your list is guaranteed to be have all the elements, while also maintaining the requirement of random order:

    >>> import random
    >>> tab = ["house", "word", "computer", "table", "cat", "enter", "space"]
    >>> random.shuffle(tab)
    >>> print tab
    

    As for your original code, that will not work, since the if else block as you've written ensures that no element is added within the list tab. You could correct that by removing the else block like below:

    >>> for i in range(1, 8):
    ...     item = random.choice(["house", "word", "computer", "table", "cat", "enter", "space"])
    ...     if item not in tab:
    ...         print(item)
    ...         tab.append(item)
    ... 
    house
    cat
    space
    enter
    

    But now you will need to alter the logic so that the runs in which same value is randomly returned don't affect the number of outputs.

    0 讨论(0)
  • 2020-12-12 04:15

    Read about capabilities of Random library. It can write simpler. For example:

    import random
    
    data = ["house", "word", "computer", "table", "cat", "enter", "space"]
    x = random.sample(data, len(data))
    print(x)
    
    0 讨论(0)
  • 2020-12-12 04:18
    import random
    items = ["house", "word", "computer", "table", "cat", "enter", "space"]
    tab= []
    while len(tab) < len(items):
        item = random.choice(items)
        if item not in tab:
        tab.append(item)
    print(tab)
    
        
    
    0 讨论(0)
提交回复
热议问题