python — Вывод списка слов в случайном порядке без повторений
Не могу разобраться с задачкой.
Создайте программу, которая будет выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка.
Вот мой код:
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)
Скриншот результата выполнения:
Выводит пустой список.
- python
- алгоритм
- python-3.x
- случайные-числа
4
Раз пошла такая пьянка, то вот мой вариант:
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))
0
import random spisok = ["Love", "World", "Peace", "Putin",] while spisok: print spisok.pop(random.randint(0, len(spisok)-1))
1
Я бы сделал это так:
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)
и этот вариант гораздо лучше.
4
Можно даже так:
>>> import random >>> array = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] >>> print(*random.sample(set(array), len(set(array))), sep='\n')
@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
2
import random inp = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] l = list(set(inp)) random.shuffle(l) print (l)
3
чтобы и список исходный не меняло, и памяти почти не ело ))
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()])
3
Я исправил код:
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)
Код из ответа Артёма не выполняет изначальное условие задачи: «…выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка…» так как будут выводиться повторы из списка — отсутствует проверка на уже выбранные элементы. Чуть поправим:
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)
ВНИМАНИЕ! это код чтобы выдавал только одно рандомное слово из списка слов, вдруг понадобиться.
words = "муравей бабуин барсук медведь".split() #.split делает список из слов данные в '' k_word = len(words) # считаем слова import random random_word = random.randint(0, k_word) # выберает рандомное число от 0 до последнего слово в списке (Пример: 34) finish_word = words[random_word] # выбирает 34+1 слово в списке (+1 потому что списки начинаются с 0)
Перелопатить с random. shuffle:
import random words = list(set(["Alex", "Kate", "Love", "Alex", "World", "Peace", "Plutin"])) random.shuffle(words) print(words) ['Plutin', 'Love', 'Alex', 'Peace', 'Kate', 'World']
1
Метод shuffle
меняет список, если нужно без изменения исходного списка, то лучше использовать метод sample
, там также можно указывать количество выводимых уникальных слов
import random spisok = ["Love", "World", "Peace", "Putin"] n = len(spisok) #количество слов, которые надо вывести print(*random.sample(spisok,n))
Вод мой код, строго не судите)
import random WORDS = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] WORDS_NEW = [] while len(WORDS_NEW) != len(WORDS): rand = random.choice(WORDS) if rand not in WORDS_NEW: WORDS_NEW.append(rand) print(WORDS_NEW)
1
Рандомный текст на Python — Stack Overflow на русском
Вопрос задан
Изменён 6 месяцев назад
Просмотрен 10k раз
Как сделать рандомный текст на Python? Чтобы он выводил только 1 переменную из двух? Например, я беру две переменные с таким значением:
import random role1 = "Мирный житель" role2 = "Мафия" role = randon.randomint(role1, role2) print("Вы - " + role) input("")
И мне нужно, чтобы при выводе текста выводилась ТОЛЬКО ОДНА ПЕРЕМЕННАЯ. Причем с каждого раза — разная, то role1, то role2, то снова role1.
Надеюсь, понятно объяснил. Я новичок в Python и прошу по подробнее отвечать.
- python
- python-3.x
- функции
- случайные-числа
- алгоритм
4
Случайный элемент из последовательности
random.choice(seq)
использует криптографически-небезопасный PRNG в Питоне, поэтому если вы его используете в контексте, где не желательно, чтобы можно было угадать результат последовательных вызовов, например, при генерации паролей, то следует использовать CSPRNG такой как random.SystemRandom()
, который использует os.urandom()
, который в свою очередь использует возможности, предоставляемые OS:
#!/usr/bin/env python3 import random random_item = random.SystemRandom().choice(["Мирный житель", "Мафия"])
See also: PEP 0506 — Adding A Secrets Module To The Standard Library. secrets
модуль доступен с Python 3.6 — его secrets.choice
метод это как раз простой alias для SystemRandom().choice
, показанного выше.
Каждый раз разная (неслучайная) строка
Чтобы при каждом запуске программы можно было печатать разные значения из заданной последовательности, можно создать бесконечный итератор, используя itertools.cycle()
, который по кругу возвращает элементы из этой последовательности. Чтобы сохранить состояние итератора между запусками программы, чтобы каждый раз следующее значение возвращалось, можно использовать pickle
для сериализации:
#!/usr/bin/env python3 """Print a different string on each run in a loop.""" import itertools import pathlib import pickle # load items path = pathlib.Path('it.pickle') try: data = path.read_bytes() # XXX no file locking, ignore concurrent issues except FileNotFoundError: # 1st run # create an infinite iterator that repeats the values it = itertools.cycle(iter({"Мирный житель", "Мафия"})) else: # NOTE: it is insecure if you can't trust it.pickle's content it = pickle.loads(data) # print next item print(next(it)) # save items path.write_bytes(pickle.dumps(it)) # XXX ignore data corruption issues
Чтобы избежать (маловероятного) повреждения файла (например, если питание вдруг пропадёт во время записи файла), можно использовать временный файл. See Threadsafe and fault-tolerant file writes.
Из вопроса не очень понятно, что Вы хотите сделать. «Каждый раз разная» и «рандомная» (т.е. случайная) — это совершенно разные вещи. Поэтому попробуем сделать два варианта.
Вариант 1. Случайная строка.
import random strings = ['String 1', 'String 2'] print(random.choice(strings))
Вариант 2. Каждый раз разная строка.
def next_string(): strings = ('String 1', 'String 2') next_string.i = (next_string.i + 1) % len(strings) return strings[next_string.i] next_string.i = -1 print(" ".join(next_string() for r in range(10)))
А вот так можно реализовать случай, когда при каждом следующем вызове программа выдаёт следующую строку:
def next_string(): strings = ('String 1', 'String 2') if next_string.i < 0: try: with open("i.idx", 'r') as file: next_string.i = int(file.read()) except Exception: pass next_string.i = (next_string.i + 1) % len(strings) with open("i.idx", 'w') as file: file.write(str(next_string.i)) return strings[next_string.i] next_string.i = -1 print(next_string())
Если нужно каждый раз рандомное значение, которое при этом бы ещё и не повторялось относительно предыдущих, перемешайте массив данных при помощи random.shuffle() и показывайте последовательно данные из него.
import random def rand_seq(seq): random.shuffle(seq_ := (seq if isinstance(seq, list) else list(seq))) return iter(seq_)
>>> my_sequence = rand_seq(range(10)) >>> tuple(my_sequence) (6, 3, 4, 7, 8, 5, 9, 1, 2, 0)
>>> my_sequence = rand_seq("синхрофазотрон") >>> tuple(my_sequence) ('о', 'с', 'з', 'р', 'ф', 'о', 'х', 'н', 'о', 'т', 'а', 'р', 'и', 'н')
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Генератор случайных слов — Создать список случайных слов
Генератор слов
Вы ищете случайный список слов или слова с определенными буквами? Быстро получить список случайных слов с существительными, глаголами или прилагательными из базы данных с более чем 50 000 слов. Выберите свои предпочтения и создайте свой собственный список случайных слов с помощью генератора слов или найдите и создайте слова из букв.
Попробуйте также наш Генератор чисел, Генератор букв или Генератор строк, чтобы создать список случайных чисел, букв или строк.
Settings
Number of words
100012345678
1213141516171819202122232425262728293031323334353637383940414243444546474849507510025050025005000 (Langzaam)10000 (Langzaam)25000 (Langzaam)Word should start with
Word should end with
Word should contain those letters (* = wildcard for any letter)
Разделите несколько букв или комбинаций букв запятой. Например. ge, ra или для генераторов e, e, e, если вы хотите найти слова, в которых буква e минимум в 3 раза больше. * может использоваться в качестве подстановочного знака и может быть любой буквой. Например. aw***me найдет слово удивительным.
Minimum word length
None12345678
121314151617181920212223242526Maximum word length
None12345678
121314151617181920212223242526Separate words by
NewlineLine betweenComma (, )Pipe ( | )Space ( )
Random words list
Random words
Share, распечатать или скопировать слова
Что такое генератор случайных слов?
Генератор случайных слов — это онлайн-инструмент, который поможет вам быстро создать список случайных слов из базы данных, содержащей 50 000 наиболее часто используемых английских слов. С помощью этого инструмента вы можете генерировать слова, существительные, глаголы и прилагательные.
Вы можете выбрать начальную и конечную буквы, содержащие буквы и длину слова, чтобы создать свой собственный список слов. Инструмент позволяет генерировать до 25 000 слов, случайно выбранных на основе ваших настроек. Вы можете легко поделиться, скопировать или распечатать список слов.
Вы также можете использовать инструмент для поиска слов, чтобы находить слова из букв. Настройте фильтры в настройках решателя слов, чтобы найти определенные слова, которые начинаются, заканчиваются или содержат определенные буквы.
Зачем вам использовать генератор слов?
Существует множество причин и вариантов использования этого инструмента, например:
- Практикуйте и улучшайте свой словарный запас английского языка.
- Получите идеи для творческих работ.
- Помогите найти слова с буквами для таких игр, как Wordfeud, Wordle, Scrabble, Pictionary, 30 секунд или других словесных игр.
- Стихи и стихи или как словарь рифм.
- Придумайте новые названия или песни.
- Список фиктивных слов для разработчиков.
- Поиск слов с определенными буквами или слов, содержащих набор букв.
Часто задаваемые вопросы
Вы можете найти ответы на часто задаваемые вопросы о нашем инструменте в списке ниже. Вашего конкретного вопроса нет в списке? Пожалуйста, отправьте нам сообщение через Facebook или Instagram.
Генератор слов использует базу данных с 50 000 наиболее часто используемых английских слов.
Этот инструмент поддерживает только английские слова. Вы можете использовать Woorden Generator, чтобы найти нидерландские слова.
Инструменты генератора случайных чисел
Список 100 лучших случайных слов для улучшения письма
Если вы ищете случайные слова, чтобы добавить их в свой текст, ознакомьтесь с нашим списком случайных слов ниже.
Расширение словарного запаса за счет различных английских слов необходимо для лучшего понимания того, как их можно использовать в предложениях. Посмотрите список ниже, чтобы ознакомиться со 100 случайными словами, которые вы можете использовать в разговоре и письме.
Содержание
- Где случайные слова?
- Односложные случайные слова
- Двухсложные случайные слова
- Случайные слова из трех и более слогов
- Случайные сложные слова
- Случайные словарные слова
- Автор
Где находятся случайные слова?
Picnic — это образец случайного слова, которое вы можете использовать в своем письме. Знание общеупотребительных английских слов необходимо для повседневной деятельности и обычных вопросов. Однако, если вы хотите, чтобы ваше письмо было интересным, вы должны улучшить свой словарный запас. В творческом письме преподаватели английского языка и авторы добавляют случайные слова, чтобы не утомлять читателей повторяющимися терминами или фразами. Случайные слова идеально подходят для улучшения того, как вы говорите и пишете. Случайные слова — это необычные и забавные слова в английском языке. Они также пригодятся, когда вы участвуете в Pictionary и общаетесь с другими людьми.
Here is a list of random words in the English language:
Abjure | Future | Picnic |
Agonistic | Garland | Protect |
Airline | Gigantic | Publish |
Бандит | Гуфи | Четырехугольник |
Банкет | Правительство | Пересчет |
Бинокль0120 | Grandnieces | Redoubtable |
Biologist | Handbook | Reflection |
Blackboard | Himself | Reporter |
Board | Indulge | Ring |
Bookworm | Inflatable | Salesclerk |
Ириска | Предварительный | Снимок |
Камера | Промежуточный | Shellfish |
Campus | Invest | Ship |
Catfish | Jackpot | Significance |
Carsick | Kitchenette | Sometimes |
Celebrate | Law | Sublime |
Celery | Life | Tabletop |
Citizen | Lifeline | Teamwork |
Coloring | Love | Tennis |
Compact | Magnificent | Timesaving |
Dark | Malevolence | Tree |
Damage | Man | Termination |
Dangerous | Mascot | Недооценить |
Декорум | Зефир | Виноградник |
Одобрить | Mine | War |
Engender | Moonwalk | Way |
Erratic | Near | Wealth |
Envelope | Nephogram | Wednesday |
Etymology | Newborn | World |
Свидетель | Шумный | Ксерокс |
Поминальная речь | Сова | Вы |
Fish | С Коррезис | Зест |
Food | Преступник | |