Случайное уникальное значение Python для нескольких переменных - PullRequest
1 голос
/ 31 октября 2019

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно задать буквам z случайное уникальное значение от 1 до 26. Я хочу избежать того же числа, равного нескольким буквам. Текущие методы, которые у меня есть, это более 70 строк и просто циклы каждой буквы не равны значению, данному ранее для другой буквы. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Используйте random.sample(), который может принимать любое количество уникальных элементов из заданного интервала. Если вы берете всю итерацию, используя ее, то вы получаете элементы в фактически случайном порядке. Например, следующий фрагмент отображает буквы алфавита в случайные числа от 1 до 26 без повторения.

import random

alphabet = 'abcdefghijklmnopqrstuvwxyz'
numbers = range(1, len(alphabet) + 1)
correspondence = list(zip(alphabet, random.sample(numbers, len(alphabet))))
print(correspondence)
# [('a', 21), ('b', 19), ('c', 2),  ('d', 14), ('e', 12), ('f', 3), 
#  ('g', 8),  ('h', 11), ('i', 10), ('j', 4),  ('k', 5),  ('l', 22), 
#  ('m', 18), ('n', 20), ('o', 16), ('p', 23), ('q', 1),  ('r', 25), 
#  ('s', 9),  ('t', 15), ('u', 26), ('v', 7),  ('w', 17), ('x', 24), 
#  ('y', 6),  ('z', 13)]
1 голос
/ 31 октября 2019

Вы можете использовать random.shuffle() ( документы ) и chr() ( документы ) для получения желаемых результатов.

ASCII символы нижнего алфавита начинаются с 97.

import random

numbers = list(range(1,27))

random.shuffle(numbers)

for num in numbers:
  print(f'Letter={chr(96+num)}, Random Number={num}')

Выходы:

Letter=v, Random Number=22
Letter=t, Random Number=20
Letter=u, Random Number=21
Letter=w, Random Number=23
Letter=f, Random Number=6
Letter=b, Random Number=2
Letter=d, Random Number=4
Letter=h, Random Number=8
Letter=z, Random Number=26
.
.
.
.

Вы также можете использовать random.sample(),Подробнее здесь .

Один вкладыш:

result = [(chr(96+num), num) for num in random.sample(list(range(1,27)), 26)]

Выходы:

[('p', 16), ('x', 24), ('d', 4), ('f', 6), ('w', 23), ('z', 26), ('m', 13), ('n', 14), ('b', 2), ('a', 1), ('s', 19), ('q', 17), ('t', 20), ('u', 21), ('h', 8), ('l', 12), ('e', 5), ('k', 11), ('g', 7), ('c', 3), ('v', 22), ('r', 18), ('j', 10), ('i', 9), ('o', 15), ('y', 25)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...