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