python实现随机产生10个数字,取值范围[1,20],统计重复的数字有几个,分别是什么?不重复的数字有几个,分别是什么?

本文介绍了三种Python方法来统计随机生成的[1,20]范围内10个数字的重复与不重复情况。方法1和方法2分别展示了不同的输出结果,而方法3通过比较和标记策略有效检测重复数字,输出了原始数据、重复数字和不重复数字的详细信息。" 124124110,1212339,SpringBoot配置多Redis集群实战,"['spring', 'redis', 'SpringBoot开发', '分布式缓存', '多数据源']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法1

import random
lst = []
rep_lst = []   #重复数字
uniq_lst = []  #不重复数字
for i in range(10):
    temp = random.randint(1,20)   #产生随机数,闭区间
    if temp in lst and temp not in rep_lst:   #寻找重复数字
        rep_lst.append(temp)
    lst.append(temp)
for j in lst:
    if j not in rep_lst:
        uniq_lst.append(j)
print(lst)
print(len(rep_lst),':',rep_lst)
print(len(uniq_lst),':',uniq_lst)

输出结果:
[17, 19, 1, 13, 15, 18, 9, 19, 11, 10]
1 : [19]
8 : [17, 1, 13, 15, 18, 9, 11, 10]

方法2

import random
lst = [0] * 21
stri = ""
strimin = ""
strimax = ""
for i in range(10):
    num = random.randint(1,20)
    lst[num] += 1
maxnum = max(lst)
for j in range(1,21):
    if lst[j] > 0:
        stri += "{},".format(j)
    if lst[j] == 1:
        strimin += "{},".format(j)
    if lst[j] == maxnum:
        strimax += "{},".format(j)
print("数字最多出现过{}次".format(maxnum))
print("数字出现有:{}其中{}出现过{}次,{}只出现过1次".format(stri,strimax,maxnum,strimin))

输出结果:
数字最多出现过2次
数字出现有:1,2,3,4,5,8,9,10,20,,其中4,出现过2次,1,2,3,5,8,9,10,20,只出现过1次

方法3
思路:对于一个排序数列,相等数字会在一起,但排序耗时,不排序解决?
例如:11,7,5,11,6,7,4,先拿出11,依次从第二个数字开始比较,发现11就把对应索引标记,这样一趟比较即可知道11是否重复,那些地方重复;第二趟使用7和其后数字依次比较,发现7就标记,当遇到以前比较过的11的位置的时候,其索引已经被标记为1,直接跳过(如下所示)
第1次
状态标记:1 1
索引情况:0 1 2 3 4
随机序列:11 7 6 11 7
第2次
状态标记:1 1 1 1
索引情况:0 1 2 3 4
随机序列:11 7 6 11 7

import random
nums = []
for _ in range(10):
    nums.append(random.randrange(21))
print("原始数据为={}".format(nums))
print()

length = len(nums)
samenums = [] #记录相同的数字
diffnums = [] #记录不同的数字
states = [0] * length # 记录不同的索引异同状态

for i in range(length):
    flage = False #假定没有重复
    if states[i] == 1:
        continue
    for j in range(i+1,length):
        if nums[i] ==nums[j]:
            flag = True
            states[j] = 1
    if flage: #有重复
        samenums.append(nums[i])
        states[i] = 1
    else:
        diffnums.append(nums[i])
print("重复数字为{1},次数为{0}".format(len(samenums),samenums))
print("不重复数字为{1},次数为{0}".format(len(diffnums),diffnums))
print(list(zip(states,nums)))

输出结果:
原始数据为=[15, 13, 1, 14, 3, 3, 19, 10, 5, 16]
重复数字为[],次数为0
不重复数字为[15, 13, 1, 14, 3, 19, 10, 5, 16],次数为9
[(0, 15), (0, 13), (0, 1), (0, 14), (0, 3), (1, 3), (0, 19), (0, 10), (0, 5), (0, 16)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值