我有两个数组,我想通过组合这两个数组来创建一个名称。 但是,不应该有重复
除了查找名称结果值数组的递归方法之外,我是否可以像返回随机名称一样返回随机名称
最简单的方法是将随机生成的名称存储在一个列表中,并在每次创建新名称时查找该列表,如下所示
import random
first_name = ['tony', 'adam', 'agustin', 'branden','stan']
last_name = ['smith', 'stark', 'wlliams']
full_name_dup_list = []
def generate_full_name():
full_name =random.choice(first_name) +" "+ random.choice(last_name)
if full_name in full_name_dup_list:
generate_full_name()
else:
full_name_dup_list.append(full_name)
print(full_name)
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
result:
tony stark
tony wlliams
branden stark
branden smith
adam stark
agustin stark
agustin smith
stan smith
每个结果都是不重复的全名
但是,我不想使用检查已经创建的数组的方法。 因为数组的大小会增加,返回值的数量也会增加,所以在不幸的情况下,函数可能会继续递归执行
下面是另一个计划: 比如说两种深度的陈述
import random
first_name = ['tony', 'adam', 'agustin', 'branden','stan']
last_name = ['smith', 'stark', 'wlliams']
class Index():
idx_first = 0
idx_last = 0
def generate_full_name():
full_name=first_name[Index.idx_first] + " " + last_name[Index.idx_last]
print(full_name)
Index.idx_last=Index.idx_last+1
if Index.idx_last== len(last_name)-1:
Index.idx_first=Index.idx_first+1
Index.idx_last=0
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
generate_full_name()
result:
tony smith
tony stark
adam smith
adam stark
agustin smith
agustin stark
branden smith
但这似乎不是随机的
问:我能否创建一个函数来输出一个全名列表,比如random,而不是检查现有的全名数组
要做到这一点,最简单的方法是使用哈希表:每个字符串都使用一个易于恢复的哈希代码进行索引。Python很容易做到这一点:将名称放入
set
,然后检查生成的新名称是否已经在集合中。做出新的选择,直到你得到一个你还没有用过的你知道有多少个名字是可能的——只有
len(first) * len(last)
。您可以在此范围内生成一个随机样本,然后做一点数学运算,将这些组合与生成的数字相匹配。对于范围内的给定整数,映射为:在中,您可以使用
random.sample
,然后构建名称:结果:
random.sample()
如果您试图获取的数量超过您想要的总数,则会抛出一个错误,因为您需要重复一种选择是拥有一组副本,并使用生成器:
印刷品:
另一个版本使用
itertools.product
和random.sample
:印刷品:
相关问题 更多 >
编程相关推荐