2013-07-05 3 views
1

Я пишу функцию, которая будет создавать новый перетасовал список (я не могу использовать встроенную функцию воспроизведения в случайном порядке)Python Перемешать с нуля

def Shuf(aList): 

    import random 
    newList=[] 
    for i in range(len(aList)): 
     element=random.sample(aList,1) 
     newList+=element 
    return newList 

Это то, что я прямо сейчас, и это работает но когда я возвращаю перетасованный список, повторяются элементы моего списка. Как я могу заставить мою функцию только возвращать элементы в списке один раз?

+1

Отбор проб позволяет выбрать один и тот же элемент несколько раз - как вы обнаружили. Вместо выборки вы можете рассматривать ** замену ** как стратегию. – FMc

+0

shuffle без тасования, что звучит так, как домашнее задание ... – Guillaume

+4

@Guillaume +1 подозрительная домашняя работа. Однако есть некоторые вещи, которые мы можем дать вам некоторые рекомендации. Прежде всего, __do не импортировать модули внутри функции__, если можно было бы избежать. Во-вторых, __try исследуйте ключевые встроенные структуры данных, которые предлагает Python, и вы можете быть удивлены 1. насколько легко эта проблема может быть решена 2. сколько способов решить эту проблему. – woozyking

ответ

0

Что-то вроде следующего (не проверено).

from random import choice 

def get_list(l): 
    len_ = len(l) 
    output = [] 

    for i in range(len_): 
     index = choice(len(l)) 
     output.append(l[ index ]) 
     del l[ index ] 

    return output 
0

Вы можете обнаружить, что эта реализация для перетасовки соответствует вашим потребностям. Перед использованием убедитесь, что вы заметили разницу между двумя функциями.

>>> 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] 
>>> 
Смежные вопросы