多个变量的Python随机唯一值

问题描述 投票:1回答:2

我遇到的问题是,我需要将字母a-z设置为从1到26的随机唯一值。我要避免使用等于多个字母的相同数字。我目前使用的方法超过70行,并且每个字母的while循环不等于先前为其他字母指定的值。有任何想法吗?

python random
2个回答
2
投票

使用random.sample(),它可以从给定间隔中获取任意数量的唯一元素。如果您使用整个可迭代对象,那么您将以有效的随机顺序获得元素。例如,以下代码段将字母表中的字母映射到126的随机数,而无需重复任何代码。

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
投票

您可以使用random.shuffle()docs)和chr()docs)获得所需的输出。

[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()。更多信息here

一个班轮:

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)]
© www.soinside.com 2019 - 2024. All rights reserved.