beflyguy
beflyguy

Reputation: 135

List shuffling by range

I have a list full of strings. I want to take the first 10 values, shuffle them, then replace the first 10 values of the list, then with values 11-20, then 21-30, and so on.

For example:

input_list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t']

and a function called:

shuffle10(input_list)
>>> ['d','b','c','f','j','i','h','a','e','g','m','n','s','r','k','p','l','q','o','t']

I thought it'd work if I defined an empty list and appended every 10 values randomized:

newlist=[]
for i in range(int(len(input_list) / 10)):
    newlist.append(shuffle(input_list[(i*10):(i+1)*10]))
    print(newlist)

but all this returns is:

[None]
[None, None]

Upvotes: 1

Views: 54

Answers (2)

Sunitha
Sunitha

Reputation: 12015

Use random.sample instead of shuffle

>>> input_list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t']
>>> sum((random.sample(input_list[n:n+10], 10) for n in range(0,len(input_list),10)), [])
['f', 'i', 'd', 'a', 'g', 'j', 'e', 'c', 'b', 'h', 'p', 'l', 'r', 'q', 'm', 't', 's', 'n', 'o', 'k']

Upvotes: 2

Kat
Kat

Reputation: 1654

You're creating a temp list in place and shuffling it but not capturing its results. You can pull out the relevant sublist, shuffle, then create a new list:

new_list=[]
for i in range(1, len(input_list), 10):
    list_slice = input_list[i:i + 10]
    shuffle(list_slice)
    new_list.extend(list_slice)
print(new_list)

Upvotes: 1

Related Questions