Я работаю над написанием двух разных функций тасования.
Первая функция перетасовки должна принимать список и возвращать новый список с элементами, перетасованными в случайный порядок.
Это то, что я до сих пор сделал для первого тасования function-
def shuf(List):
import random
newList=[]
for i in List:
i=random.randrange(len(List))
newList+=i
return newList
Вторая функция перетасовки принимает список как параметр и перетасовывает список на месте.
Я знаю, как это сделать со встроенной функцией, но мне не разрешено использовать ее.
Вы можете обнаружить, что эта реализация для перетасовки соответствует вашим потребностям. Перед использованием убедитесь, что вы заметили разницу между двумя функциями.
>>> import random
>>> def shuffle(array):
copy = list(array)
shuffle_in_place(copy)
return copy
>>> def shuffle_in_place(array):
array_len = len(array)
assert array_len > 2, 'Array is too short to shuffle!'
for index in range(array_len):
swap = random.randrange(array_len - 1)
swap += swap >= index
array[index], array[swap] = array[swap], array[index]
>>> array = list(range(10))
>>> array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle(array)
[7, 2, 3, 5, 8, 6, 0, 1, 9, 4]
>>> array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle_in_place(array)
>>> array
[8, 3, 1, 6, 9, 7, 0, 4, 2, 5]
>>>
План: перейдите в список с начала, начиная с элемента 0; найдите новую случайную позицию для него, скажем, 6, положите значение 0s в значение 6 и 6s в 0. Перейдите к элементу 1 и повторите этот процесс и так далее через остальную часть списка
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