Python学习漏洞

今天去面试两家公司,且不说结果如何,谈谈今天发现的知识的漏洞。

2个字典怎么取并集?

emmm当时回答的比较水,没想到别的方法,然后就说了一个极其笨的方法。
for循环balabala。。。
脑子里这么想的。。

dict1 = {'a': 2, 'c': 3}
dict2 = {'a': 3, 'd': 4}

union_dict = {}

for key in dict1:
    union_dict[key] = dict1[key]
for key in dict2:
    union_dict[key] = dict2[key]

print(union_dict)
# 脑子进水了 手动滑稽

面试后研究一下字典的常用方法:update
字典的更新方法

dict1.update(dict2)
print(dict1)
# 愉快而又简单的结束了

接下来列表的insert方法的内部原理:
Python中的列表不是由若干个独立的节点相互引用而组成的,而是一整块单一连续的内存区块–我们通常称之为数组。当我们进行insert操作是就会将插入位置后边的元素进行复制。对于数组而言,每次执行insert操作都需要移动插入点右边所有的元素,甚至在必要时需要把所有数组元素复制到另外一个更大的数组中。
详见
append比insert快的原因

'''
一个无序整数数组,返回最大的三个整数,要求不能数组排序,尽量遍历一遍数组
'''
# 刚开始用的 insert 完后就性能了,就凉凉了,面试官说insert性能低。
import random

nums_list = [random.randint(0, 100000) for i in range(100000)]

new_list = sorted(nums_list[0:3], reverse=True)

for num in nums_list[3:]:
    if num > new_list[-1]:
        new_list.append(num)
        new_list.sort(reverse=True)
        new_list.pop(-1)

print(new_list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值