Python - выбор объектов из списка с конкретным диапазоном
у меня появилась проблема, попытаюсь как можно понятнее объяснить. И так, у меня есть список слов, допустим в нем есть "какие то слова не понятно какие но есть". И так же есть рандомное число, пусть будет 6. И со всеми этими данными мне нужно сгенерировать строку, в которой будет 6 слов из этого списка, но они будут рандомно разбросаны, то есть должно получится "слова какие есть то но есть". И если будет число 8, то в строке должно быть 8 таких слов в рандомном порядке. Как можно это реализовать? Заранее спасибо
Ответы (1 шт):
import random
import string
# эта функция рандомно выбирает заданное количество слов из массива со словами
def choice(word_list, number, overlap=False):
"""
Функция принимает word_list - список со словами,
и number - количество слов, которое нужно выбрать из списка.
Если длина word_list будет меньше number,
то вернётся список с той же длиной.
Если задать значение для overlap=True и
длина word_list будет меньше number,
то будет возвращаться список заданной длины, но в нем будут повторения.
Если word_list пуст, возвращается пустой список.
"""
if len(word_list) == 0:
return ""
if overlap:
return " ".join([random.choice(word_list) for _ in range(number)])
else:
random.shuffle(word_list)
return " ".join(word_list[:number])
list_of_words = 'VdHf dwbWXEgsb ANuRgAyNUe RDDSATRqHjvb oFegomTG pvqqUF UEIChMkBnguNj ExG JgU eRUhtArCw KRDh'.split()
result = [
choice(list_of_words, 3),
choice(list_of_words, 4),
choice(list_of_words, 10),
choice(list_of_words, 10, True),
]
print(*result, sep="\n"*2)
вовод:
VdHf eRUhtArCw KRDh
KRDh eRUhtArCw ANuRgAyNUe dwbWXEgsb
ANuRgAyNUe JgU eRUhtArCw KRDh dwbWXEgsb ExG VdHf
KRDh eRUhtArCw JgU eRUhtArCw KRDh KRDh JgU VdHf dwbWXEgsb KRDh
В первом и втором случае можно увидеть, что всё довольно ожидаемо, в третьем же случае мы видим, как работает ограничение, и нам выдается массив меньшего размера, нежели мы запросили, в чётвёртом случае мы получаем массив нужного размера, но в нём присутствуют повторения.
Если вам не хочется, чтобы функция занимала столько места, вот вам коротка версия:
import random
import string
def choice(word_list, number, overlap=False):
if len(word_list) == 0: return ""
if overlap:
return " ".join([random.choice(word_list) for _ in range(number)])
else:
random.shuffle(word_list)
return " ".join(word_list[:number])