2

Here is my code

from random import randint
SudList = []
numbers = [1,2,3,4,5,6,7,8,9]
for i in numbers:
    SudList.append(numbers[randint(0,len(numbers)-1)])
    print("Sudlist-" + str(SudList))
    numbers.remove(SudList[-1])
    print("numbers-" + str(numbers))
print(SudList)

I expected this code to return something like this- (the final SudList)

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

But Instead it Returns something like this -

[9,4,6,7,2]

Here is the whole output-

Sudlist-[5]
numbers-[1, 2, 3, 4, 6, 7, 8, 9]
Sudlist-[5, 1]
numbers-[2, 3, 4, 6, 7, 8, 9]
Sudlist-[5, 1, 9]
numbers-[2, 3, 4, 6, 7, 8]
Sudlist-[5, 1, 9, 3]
numbers-[2, 4, 6, 7, 8]
Sudlist-[5, 1, 9, 3, 4]
numbers-[2, 6, 7, 8]
[5, 1, 9, 3, 4]
Press any key to quit

How do i correct my code?

Jon Clements
  • 138,671
  • 33
  • 247
  • 280
Anvit
  • 218
  • 2
  • 12

4 Answers4

3

You can use shuffle. It's will meet your needs.

import random
random.shuffle(numbers)

output

[7, 4, 3, 2, 1, 8, 6, 5, 9]
Rahul K P
  • 15,740
  • 4
  • 35
  • 52
2

If you wish to stick with this piece of code, simply use i in range len(numbers) instead of i in numbers. Your remove statement is reducing the length of numbers and thus, the number of numbers printed is always (len(numbers)+1)/2

from random import randint
SudList = []
numbers = [1,2,3,4,5,6,7,8,9]
for i in range(len(numbers)):
    SudList.append(numbers[randint(0,len(numbers)-1)])
    print("Sudlist-" + str(SudList))
    numbers.remove(SudList[-1])
    print("numbers-" + str(numbers))
print(SudList)
Vaibhav Bajaj
  • 1,934
  • 16
  • 29
2

If you want to stay with your implementation just change:

for i in numbers:

To:

for i in range(len(numbers)):

So you don't iterate over the list that changes

Ohad Eytan
  • 8,114
  • 1
  • 22
  • 31
2

As has been mentioned, shuffle is the quickest and most readable solution.

import random

numbers = [1,2,3,4,5,6,7,8,9]
random.shuffle(numbers)
print(numbers)

However, it looks like you're wanting to see the state of each list at every step, so if you're looking for a custom implementation, you could also try the following:

from random import randint

Sudlist = []
numbers = [1,2,3,4,5,6,7,8,9]

while len(numbers) > 0:
    index = randint(0, len(numbers) - 1)
    Sudlist.append(numbers.pop(index))
    print('Sudlist-' + str(Sudlist))
    print('numbers-' + str(numbers))
print(Sudlist)
LukeGeneva
  • 584
  • 1
  • 3
  • 15