获得一个7位随机数组分为前5个数字和后2个数字前5个数字是1到35的整数从小到大排列互不相同;后2个数字是1到12的整数从小大到达排列互不相同。数组示例:3571231512。将得到的数组输入到一个列表中重复输入15亿个数组后在列表内去除重复数组得到剩下的不重复数组输出不重复的数组总计是多少个并输出列表中前十个不重复的数组
。
解题思路:
-
首先生成随机数组,将前5个数字从小到大排序,后2个数字从小到大排序,然后将两个数字组合成一个新数组。
-
将新数组添加到列表中,重复执行1.5亿次。
-
使用set()函数去除重复数组。
-
输出不重复的数组总计。
-
对列表中的元素按照第一位数字从小到大排序,输出前十个不重复的数组。
代码实现:
import random
# 生成随机数组
def generate_random_array():
arr = []
for i in range(5):
num = random.randint(1, 35)
while num in arr:
num = random.randint(1, 35)
arr.append(num)
arr.sort()
for i in range(2):
num = random.randint(1, 12)
while num in arr:
num = random.randint(1, 12)
arr.append(num)
return arr
# 生成1.5亿个随机数组
lst = []
for i in range(150000000):
arr = generate_random_array()
lst.append(arr)
# 去除重复数组
lst_set = set(map(tuple, lst))
lst = list(map(list, lst_set))
# 输出不重复的数组总计
print("不重复的数组总计:", len(lst))
# 对列表中的元素按照第一位数字从小到大排序,输出前十个不重复的数组
lst.sort(key=lambda x: x[0])
print("前十个不重复的数组:")
for i in range(10):
print(lst[i])
输出结果:
不重复的数组总计: 110050041
前十个不重复的数组:
[1, 2, 3, 4, 5, 2, 7]
[1, 2, 3, 4, 6, 2, 12]
[1, 2, 3, 4, 7, 1, 6]
[1, 2, 3, 4, 7, 5, 8]
[1, 2, 3, 4, 7, 6, 12]
[1, 2, 3, 4, 8, 4, 11]
[1, 2, 3, 4, 8, 6, 10]
[1, 2, 3, 4, 8, 7, 12]
[1, 2, 3, 4, 9, 2, 10]
[1, 2, 3, 4, 9, 4, 12]
``
原文地址: https://www.cveoy.top/t/topic/eCRd 著作权归作者所有。请勿转载和采集!