Shuffle a python list without using the built-in function

前端 未结 3 1766
情书的邮戳
情书的邮戳 2021-01-15 18:31

I\'m working on writing two different shuffle functions.

The first shuffle function must take a list and return a new list with the elements shuffled into a random o

相关标签:
3条回答
  • 2021-01-15 18:46

    You might find that this implementation for shuffling suits your needs. Make sure that you note the difference between the two functions before using them.

    import copy
    import random
    
    
    def main():
        my_list = list(range(10))
        print(my_list)
        print(shuffle(my_list))
        print(my_list)
        shuffle_in_place(my_list)
        print(my_list)
    
    
    def shuffle(container):
        new_container = copy.copy(container)
        shuffle_in_place(new_container)
        return new_container
    
    
    def shuffle_in_place(container):
        for index in range(len(container) - 1, 0, -1):
            other = random.randint(0, index)
            if other == index:
                continue
            container[index], container[other] = container[other], container[index]
    
    
    if __name__ == '__main__':
        main()
    
    0 讨论(0)
  • 2021-01-15 18:47

    You can use this:

    import random
    def shuffle(lst):
         return sorted(lst ,key = lambda i,random.ramdom())
    
    0 讨论(0)
  • 2021-01-15 18:52

    Plan: Go through the list from the beginning starting with element 0; find a new random position for it, say 6, put 0’s value in 6 and 6’s value in 0. Move on to element 1 and repeat this process, and so on through the rest of the list

    import random
    iteration = random.randint(2, 100)
    temp_var = 0
    while iteration > 0:
        # We will be swapping the value of i for j.
        # And then setting j to what i was using the temp_var place holder.
        for i in range(1, len(my_list)): # have to use range with len()
            for j in range(1, len(my_list) - i):
                # Using temp_var as my place holder so I don't lose values
                temp_var = my_list[i]
                my_list[i] = my_list[j]
                my_list[j] = temp_var
    
            iteration -= 1
    
    0 讨论(0)
提交回复
热议问题