1. 程式人生 > >統計隨機數中重復數出現的次數----列表的練習

統計隨機數中重復數出現的次數----列表的練習

練習 color style end range err com 什麽 pre

  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]))

統計隨機數中重復數出現的次數----列表的練習