利用python的list 与 字典 分别实现:
要求把all_nums平均分成两份,统计前半部分数据中有哪些数字出现在后半部分中,并输出,数字不能重复。
也就是说:假如all_nums = [1,3,3,1,2,3],那最终的输出结果为[1,3],而不是[1,3,3]
- list实现:
# ecoding=utf-8
import random
import time
# 生成一个长度为100000的随机list
def gen_list():
return [random.randint(0, 6000) for i in range(100000)]
# 要求这个函数对all_nums进行统计,统计所有不重复数据,并输出。也就是相当于SQL的distinct。
def static(all_nums):
news_allnums = []
for i in all_nums:
if i not in news_allnums:
news_allnums.append(i) #追加函数
return news_allnums
#要求把all_nums平均分成两份,统计前半部分数据中有哪些数字出现在后半部分中,并输出,数字不能重复。
# 也就是说假如all_nums = [1,3,3,1,2,3],那最终的输出结果为[1,3],而不是[1,3,3]
def compare(all_nums):
l = len(all_nums)
all = all_nums[l // 2: -1]
all=static(all)
nums = all_nums[0: l // 2]
nums = static(nums)
news_allnums = []
for i in all:
if i in nums:
news_allnums.append(i) #追加函数
return news_allnums
if __name__ == '__main__':
all_nums = gen_list()
print(all_nums)
timestamp = time.time()
result = static(all_nums)
print(time.time() - timestamp)
nums = compare(all_nums)
print(time.time() - timestamp)
- 字典实现:
# ecoding=utf-8
import random
import time
# 生成一个长度为100000的随机list
def gen_list():
return [random.randint(0, 60000) for i in range(100000)]
# 要求这个函数对all_nums进行统计,统计所有不重复数据,并输出。也就是相当于SQL的distinct。
def static(nums):
return list(set(nums))
# 要求把all_nums平均分成两份,统计前半部分数据中有哪些数字出现在后半部分中,并输出,数字不能重复。
# 也就是说假如all_nums = [1,3,3,1,2,3],那最终的输出结果为[1,3],而不是[1,3,3]
# 大家自己用set实现一下
def compare(nums):
l = len(nums)
A = nums[l // 2: -1]
B = nums[0: l // 2]
C = set(A) & set(B) #集合运算,集合中不含重复元素
return C
# 使用字典统计all_nums中每个数字分别出现过多少次
def count(nums):
dic = {}
for i in nums:
if i not in dic:
dic[i] = 1
else:
dic[i] = dic[i] + 1
return dic
# 利用字典进行处理
# 使用字典统计all_nums前半部分的每个数字分别在后半部分中出现过多少次
'''
def countpare(nums):
l = len(nums)
A = nums[l // 2: -1]
B = nums[0: l // 2]
dic={}
for i in B:
if i in A:
if i not in dic:
dic[i] = 1
else:
dic[i] = dic[i] + 1
else:
dic[i] = 0
return dic
'''
def countpare(nums):
l = len(nums)
A = nums[l // 2: -1]
B = nums[0: l // 2]
dicB = {}
for i in B:
if i not in dicB:
dicB[i] = 0 #字典初始化
for i in A:
if i in dicB:
dicB[i] += 1
return dicB
#字典采用哈希查询,比list快很多
if __name__ == '__main__':
all_nums = gen_list()
timestamp = time.time() #获取时间戳
result = static(all_nums)
print(time.time() - timestamp)
nums = compare(all_nums)
print(time.time() - timestamp)#到现在用了多久秒
# COUNT=count(all_nums)
# print(COUNT)
COUNTPARE = countpare(all_nums)
print(COUNTPARE)
print(time.time() - timestamp)