Задать вопрос
@mmerkulov0

Как генерировать случайные комбинации символов без повторений на python?

Есть код на питоне, который выдаёт случайные комбинации символов из списка:
import random
symbs = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M']
t = 80000
tt = 0
while (t != tt):
	x_ = 8
	cc = 0
	s = 8
	r = ""
	x = ""
	res = ""
	while (cc != s):
			res = ""
			x = str(symbs[random.randint(0,61)])
			r = r + x
			cc += 1
	t += 1
	print(r)

как исключить повторения при генерации таких комбинаций?
  • Вопрос задан
  • 2320 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
Все уникальные комбинации элементов списка (в размере всех входящих в список элементов):
>>> import itertools
>>> values = list(range(1, 4))
>>> values
[1, 2, 3]
>>> list(itertools.permutations(values, 3))
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mentor2
извините, но очень непитонячий, неидиоматичный код!!

Когда говорят об уникальности , неповторяемости элементов в финальной
коллекции, то либо применяйте множество, либо сэмплуйте, типа
>>> random.sample(symbs,k=8)
['z', 'h', 'V', 'T', 'l', 'j', 'g', 'c']
и зачем список, когда вы всё в стрОках делаете...
не проще ли:

>>> import string
>>> symbs = string.digits + string.ascii_letters
>>> # а, если надо всё-таки список, то делайте классику
>>> symbs = ','.join(symbs)
>>> symbs = symbs.split(sep =',')
>>>
и совсем не понятно
"исключить повторения при генерации таких комбинаций" каких?
внутри восьмерок, которые ранд-интом выдёргиваются или повторений из
самих восьмерок в восьмидесятитысячной генерируемых
комбинаций (от первого цикла)

что за имя x_ ?? зачем оно??
вы растите т (в предпоследней строчке ), но нафиг?, она от 80000
и вверх и никогда не будет равна тт, т.е. нулю, вы плохо списали.
такие решения я у своих студентов не принимаю.....
В идеале такие задачи в 2-3 строки и через разные комприхенкшины...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы