计算出唯一的随机7位数数组前五位数字每个数字的区间为1到35后二位数字每个数字的区间为1到12。前五位每个数字按从小到大顺序排列互不相同;后2位数字按从小到大排列互不相同;持续执行直到获得一个包含15亿个数组的集合对这个集合进行对比对比后得出完全不重复的7位数数组7位数数组示例:08091425290406
由于前五位数字需要按从小到大的顺序排列,我们可以先生成一个包含前五位数字的有序列表,然后随机生成后两位数字,再将它们插入到列表中,形成一个完整的随机7位数。
以下是实现代码:
import random
# 生成前五位数字的有序列表
digits = list(range(1, 36))
# 生成后二位数字的有序列表
tails = list(range(1, 13))
# 生成集合
nums_set = set()
# 不断生成随机数组,直到集合中包含1.5亿个数组
while len(nums_set) < 150000000:
# 随机选择5个数字,组成前五位数字
random.shuffle(digits)
front = sorted(digits[:5])
# 随机选择2个数字,组成后二位数字
random.shuffle(tails)
tail = sorted(tails[:2])
# 将前五位数字和后二位数字组合成完整的7位数
num = tuple(front + tail)
# 将生成的数组添加到集合中
nums_set.add(num)
# 将集合转换为列表,并按数字大小排序
nums_list = sorted(list(nums_set))
# 输出结果
print(len(nums_list)) # 应输出150000000
print(nums_list[:10]) # 输出前10个元素,示例:[(1, 2, 3, 4, 5, 6, 7), (1, 2, 3, 4, 5, 6, 8), (1, 2, 3, 4, 5, 6, 9), (1, 2, 3, 4, 5, 6, 10), (1, 2, 3, 4, 5, 6, 11), (1, 2, 3, 4, 5, 6, 12), (1, 2, 3, 4, 5, 7, 8), (1, 2, 3, 4, 5, 7, 9), (1, 2, 3, 4, 5, 7, 10), (1, 2, 3, 4, 5, 7, 11)]
这个程序会生成一个包含1.5亿个元素的列表,每个元素都是一个长度为7的元组,其中前五个元素是按从小到大排序的数字,取值范围为1到35,后两个元素也是按从小到大排序的数字,取值范围为1到12。由于每个元素都是唯一的,因此整个列表也是唯一的
原文地址: https://www.cveoy.top/t/topic/eCM5 著作权归作者所有。请勿转载和采集!