Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Вывод списка слов в случайном порядке без повторений

#python #алгоритм #python_3x #случайные_числа


Не могу разобраться с задачкой.


  Создайте программу, которая будет
  выводить список слов в случайном
  порядке. На экране должны печататься
  без повторений все слова из
  представленного списка.


Вот мой код:

spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",]
empty_list = []

count = len(spisok)
schetchik = 0

while count != schetchik:
        for item in spisok:
            randitem = random.choice(spisok)
            schetchik += 1
            if randitem not in spisok:
                empty_list += randitem
            else:
                break
        print(empty_list)


Скриншот результата выполнения: 



Выводит пустой список.
    


Ответы

Ответ 1



Раз пошла такая пьянка, то вот мой вариант: import random spisok = ["Love", "World", "Peace", "Putin",] random.shuffle(spisok) print spisok

Ответ 2



Чтобы вывести уникальные слова из списка в случайном порядке, используя различные генераторы псевдослучайных чисел: #!/usr/bin/env python import random words = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] unique_words = list(set(words)) random.shuffle(unique_words) # shuffle using default Mersenne Twister generator random.SystemRandom().shuffle(unique_words) # OS-provided generator print("\n".join(unique_words))

Ответ 3



import random spisok = ["Love", "World", "Peace", "Putin",] while spisok: print spisok.pop(random.randint(0, len(spisok)-1))

Ответ 4



Я бы сделал это так: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = [] while len(empty_list) != len(spisok): randitem = random.choice(spisok) if randitem not in empty_list: empty_list.append(randitem) print(empty_list) Обновление Но этот вариант не подходит для длинных списков. А вот @ВОРОН бы сделал так: import random spisok = ... empty_list = [] for item in spisok: rand_index = random.randint(0, len(empty_list) empty_list.insert(rand_index), item) и этот вариант гораздо лучше.

Ответ 5



@BOPOH, чтобы и список исходный не меняло, и памяти почти не ело )) Challange accepted import random def iter_shuffled(l): indices = list(range(len(l))) random.shuffle(indices) for i in indices: yield l[i] spisok = ["Love", "World", "Peace", "Putin",] for item in iter_shuffled(spisok): print (item) UPDATE Т.к. при копировании списка элементами нового списка станут ссылки на исходные значения, то можно обойтись и без списка индексов: import random def iter_shuffled(l): new_list = list(l) random.shuffle(new_list) for item in new_list: yield item Но тогда смысл оформлять код в виде функции-итератора практически теряется и код можно сократить до следующих строк: import random spisok = ["Love", "World", "Peace", "Putin",] new_list = list(spisok) random.shuffle(new_list) print new_list

Ответ 6



чтобы и список исходный не меняло, и памяти почти не ело )) from random import shuffle lst = [ "Alex", "Kate", "Love", "World", "Peace", "Freddie Mercury" ] idx = list(range(len(lst))) shuffle(idx) while idx: print(lst[idx.pop()])

Ответ 7



Я исправил код: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = [] count = len(spisok) schetchik = 0 while count != schetchik: for item in spisok: item = random.choice(spisok) empty_list.append(item) schetchik += 1 print(empty_list)

Ответ 8



Код из ответа Артёма не выполняет изначальное условие задачи: "...выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка..." так как будут выводиться повторы из списка - отсутствует проверка на уже выбранные элементы. Чуть поправим: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = list() count = len(spisok) schetchik = 0 while count != schetchik: for i in spisok: item = random.choice(spisok) if item in empty_list: print("Есть такие данные в новом списке!") else: empty_list.append(item) schetchik += 1 print(empty_list) # можно оставить вывод в for - увидим все попытки поиска, либо вывести из цикла. Как уже замечали авторы в комментариях, есть более краткий и практичный вариант с созданием среза изначального списка: import random spisok_slov = ["кот", "кот", "код", "код", "ток", "ток", "ток", "ток", "тук-тук", "мак", "крот", "плот", "кнут"] final_no_repeat_list = list(set(spisok_slov[:])) random.shuffle(final_no_repeat_list) print(final_no_repeat_list)

Ответ 9



Можно даже так: >>> import random >>> array = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] >>> print(*random.sample(set(array), len(set(array))), sep='\n')

Ответ 10



import random inp = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] l = list(set(inp)) random.shuffle(l) print (l)

Комментариев нет:

Отправить комментарий