PYTHON list 与 字典练习

利用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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值