统计随机数中重复数出现的次数----列表的练习
Posted jerryzao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计随机数中重复数出现的次数----列表的练习相关的知识,希望对你有一定的参考价值。
1 ‘‘‘ 2 3 随机产生10个数字: 4 每个数字取值范围【1-20】 5 统计重复的数字有几个,分别是什么? 6 统计没有重复的数字 有几个,分别是什么? 7 ‘‘‘ 8 # 产生随机数部分: 9 import random 10 l = [] 11 for _ in range(10): 12 l.append(random.randrange(21)) 13 14 l = [random.randrange(21) for _ in range(10)] # s使用列表解析式来生成,与for循环等价 15 #元组没有解释器??? 16 17 18 # 比较推荐的方法:通过打标记,即类似位图一样的方法,开始 “位图表”都为0,如果重复了就变为1。 19 # l = 11 11 7 6 6 8 11 20 # m = 0 0 0 0 0 0 0 21 # --------> 22 # l = 11 11 7 6 6 8 11 23 # m = 1 1 0 1 1 0 1 24 # 这里注意的是,之前比过了,就标记为1,下次如7 开始后,例子中的第三个11可以不去比较,利用if判断去掉 25 26 # 如果这里统计重复次数,可以看最后的改进版,如:11,因为使用第一次出现的11 开始和后面的比较,所以第二个11 下标记为1,再往后第三个11(如果有的话) 标记为3 27 # 最后在将第一个11统计并将下面的“位图”,改为4 28 # l = 11 11 7 6 6 8 11 29 # m = 3 1 0 1 1 0 2 30 31 32 33 # 第一步: 34 l = [11,11,7,6,6,8,11] 35 length = len(l) # 7 36 m = [0] * length 37 38 for i in range(length):# 0 1,3 39 if m[i] == 1:continue # 已经比较过的数字,在新的一轮里可以跳过,比如第2 个11 40 flag = False # 标记表示不相等 41 for j in range(1 + i, length):#注意这个区间 42 if m[i] != 0:continue # 已经比较过的数字,在新的一轮里可以跳过,如7 开始比较,第三个11就不用比 43 if l[i] == l[j]: #l[3] = l[4] 44 flag = True # 比较了,并相等 45 m[j] = 1 # 把相应的 “位图”置为1 46 if flag: #相等,并把第一项也置为 1 47 m[i] = 1 48 print(m) 49 50 51 # 第二步 52 l = [11,11,7,6,6,8,11] 53 length = len(l) # 7 54 m = [0] * length 55 56 for i in range(length):# 0 1,3 57 count = 1 # 统计出现次数,因为第一个用于比较了,所以先置为1 58 if m[i] == 1:continue 59 flag = False 60 for j in range(1 + i, length):#[1,6], [2,6] [4,6] 61 if m[i] != 0:continue 62 if l[i] == l[j]: #l[3] = l[4] 63 flag = True 64 m[j] = 1 65 count += 1 66 if flag: 67 m[i] = 1 68 print(l[i],count) 69 print(m) 70 71 # 第三步 72 l = [11,11,7,6,6,8,11] 73 length = len(l) # 7 74 m = [0] * length 75 76 for i in range(length):# 0 1,3 77 count = 0 # 上面的改进版,将计数加到“位图’”中 78 if m[i] == 1:continue 79 flag = False 80 for j in range(1 + i, length):#[1,6], [2,6] [4,6] 81 if m[i] != 0:continue 82 if l[i] == l[j]: #l[3] = l[4] 83 flag = True 84 count += 1 85 m[j] = count 86 if flag: 87 m[i] = count + 1 88 89 print(l[i],m[i]) 90 print(m) # [3, 1, 0, 2, 1, 0, 2] 91 92 93 # 第四步(优化), 94 # 因为有了count 就可以不用flag了,只要count != 0,表示没有相同的出现 95 l = [11,11,7,5,11,7,6,11] 96 length = len(l) # 7 97 m = [0] * length 98 samenum = [] 99 diffnum = [] 100 101 for i in range(length):# 0 1,3 102 103 if m[i] != 0:continue 104 count = 0 105 #flag = False 106 for j in range(1 + i, length):#[1,6], [2,6] [4,6] 107 if m[i] != 0:continue 108 if l[i] == l[j]: #l[3] = l[4] 109 #flag = True 110 count += 1 111 m[j] = count 112 #if flag: 113 if count: 114 m[i] = count + 1 115 samenum.append((l[i], m[i])) 116 else: 117 diffnum.append(l[i]) 118 print(samenum) 119 print(diffnum) 120 121 122 #结果: 123 [(11, 4), (7, 2)] 124 [5, 6]
1 如下这个版本也可以,但是限于统计数字比较少的情况,编程思想来自 2 https://www.cnblogs.com/JerryZao/p/9460526.html 3 通过一个列表的索引来判断次数 4 5 6 import random 7 l = [] 8 for _ in range(11): 9 num = random.randint(1,20) 10 l.append(num) 11 #print(l) # [15, 20, 6, 8, 4, 6, 13, 15, 11, 9, 11] 12 # l = [15, 20, 6, 8, 4, 6, 13, 15, 11, 9, 11] 13 counter = [0] * 21 14 for i in l: 15 counter[i] += 1 16 # counter = [0,0,1,2,....] 17 for i in range(len(counter)): 18 if counter[i]: 19 print(‘the count of {} is {}‘.format(i,counter[i]))
以上是关于统计随机数中重复数出现的次数----列表的练习的主要内容,如果未能解决你的问题,请参考以下文章