最新Python 3 那些非常规的技巧_python3 一些不常用的小技巧,2024年最新腾讯T3面试官透露

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

够漂亮吧?

4. 初始化列表

假如你要一个是10个整数0的列表,你可能首先想到:

bag =

for _ in range(10):

bag.append(0)

换个方式吧:

bag = [0] * 10

看,多优雅。

注意:如果你列表包含了列表,这样做会产生浅拷贝。

举个例子:

bag_of_bags = [[0]] * 5 # [[0], [0], [0], [0], [0]]

bag_of_bags[0][0] = 1 # [[1], [1], [1], [1], [1]]

Oops!所有的列表都改变了,而我们只是想要改变第一个列表。

改一改啦:

bag_of_bags = [[0] for _ in range(5)]

[[0], [0], [0], [0], [0]]

bag_of_bags[0][0] = 1

[[1], [0], [0], [0], [0]]

同时记住:

“过早优化是万恶之源”

问问自己,初始化一个列表是必须的吗?

5. 构造字符串

你会经常需要打印字符串。要是有很多变量,避免下面这样:

name = “Raymond”

age = 22

born_in = “Oakland, CA”

string = "Hello my name is " + name + "and I’m " + str(age) + " years old. I was born in " + born_in + “.”

print(string)

额,这看起来多乱呀?你可以用个漂亮简洁的方法来代替,.format。

这样做:

name = “Raymond”

age = 22

born_in = “Oakland, CA”

string = “Hello my name is {0} and I’m {1} years old. I was born in {2}.”.format(name, age, born_in)

print(string)

好多了!

6. 返回

Python允许你在一个函数中返回多个元素,这让生活更简单。但是在解包元组的时候出出线这样的常见错误:

def binary:

return 0, 1

result = binary

zero = result[0]

one = result[1]

这是没必要的,你完全可以换成这样:

def binary:

return 0, 1

zero, one = binary

要是你需要所有的元素被返回,用个下划线_:

zero, _ = binary

就是这么高效率!

7. 访问

你也会经常给dicts中写入key,pair(键,值)。

如果你试图访问一个不存在的于dict的key,可能会为了避免KeyError错误,你会倾向于这样做:

countr = {}

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]

for i in bag:

if i in countr:

countr[i] += 1

else:

countr[i] = 1

for i in range(10):

if i in countr:

print(“Count of {}: {}”.format(i, countr[i]))

else:

print(“Count of {}: {}”.format(i, 0))

但是,用get是个更好的办法。

countr = {}

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]

for i in bag:

countr[i] = countr.get(i, 0) + 1

for i in range(10):

print(“Count of {}: {}”.format(i, countr.get(i, 0)))

当然你也可以用setdefault来代替。

这还用一个更简单却多费点开销的办法:

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]

countr = dict([(num, bag.count(num)) for num in bag])

for i in range(10):

print(“Count of {}: {}”.format(i, countr.get(i, 0)))

你也可以用dict推导式。

countr = {num: bag.count(num) for num in bag}

这两种方法开销大是因为它们在每次count被调用时都会对列表遍历。

8. 使用库

现有的库只需导入你就可以做你真正想做的了。

还是说前面的例子,我们建一个函数来数一个数字在列表中出现的次数。那么,已经有一个库就可以做这样的事情。

from collections import Counter

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]

countr = Counter(bag)

for i in range(10):

print(“Count of {}: {}”.format(i, countr[i]))

一些用库的理由:

代码是正确而且经过测试的。

它们的算法可能会是最优的,这样就跑的更快。

抽象化:它们指向明确而且文档友好,你可以专注于那些还没有被实现的。

最后,它都已经在那儿了,你不用再造轮子了。

  1. 在列表中切片/步进

你可以指定start的点和stop点,就像这样list[start:stop:step]。我们取出列表中的前5个元素:

bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for elem in bag[:5]:

print(elem)

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值