【生活质量系列】评测几款用过的咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

最近看过此主题的会员

坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
前Google华人高管创立
面试offer一键直通
Leap.ai助你进入热门独角兽
查看: 7693|回复: 33
收起左侧

[学Python/Perl] Python刷题的一些技巧分享

  [复制链接] |试试Instant~
我的人缘0
OO0OO 发表于 2016-10-25 06:49:57 | 显示全部楼层 |阅读模式
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (114)
 
 
5% (6)  踩

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
有的时候

**用Python解题经常可以作弊,Python 处理string非常方便, python内置模块非常多,比如排列组合啥的各种....**

有的时候

**Python大法好,就是偶尔慢**


Python也是可以追求运行速度的,除了算法方面的提升,也有些常见函数之间的区别

还有我刷的Python 2 和 3 已经迷茫了,如果有说错的地方敬请指出


===========初级技巧=================


-  排序

用lst.sort() 而不是nlst = sorted(lst)

区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。


- 用xrange

xrangge 和 range的区别是在于 range会产生list存在memory中,xrange更像是生成器,generate on demand

所以有的时候xrange会更快

-  三目运算符

python 的三目运算符是这么写的 x if y else z

考虑这种list of list: matrix = [ [1,2,3] , [4,5,6] ]

row  = len(matrix)
col = len(matrix[0]) if row else 0

这样写通用的原因是, 当matrix = [], row = 0, col =0

- list 填 0

lst = [0 for i in range(3)] # lst = [0,0,0]

lst  = [[0 for i in range(3)] for j in range(2)]  # lst =  [[0, 0, 0], [0, 0, 0]]


下面这种写法危险:

lst1 = [ 0, 0, 0 ]
lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ]
lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]]

因为lst1是object,这样写会踩坑


- D.get(key, default)

如果这个key 没有在dict里面,给它一个默认值:

D = {}
if 1 in D:
  val = D[1]
else :
  val = 0

等同于这样写:

val = D.get(1, 0)


- reverse list

lst = [1,2,3]

print lst[::-1] #[3,2,1]

lst 也有reverse函数

这也也适用于str, str可是没有reverse 函数的,str[::-1] 可用 √


=================进阶一下=====================

Python 也是有自己的数据结构的!!!!

- deque
  还在用list来做queue么? deque,当求快queue的时候,你值得拥有

- Counter
  Counter做啥就顾名思义了

- yield
  用yield不用return ( 我也还在学习阶段




import collections就可以用了,参见  collections — High-performance container datatypes



===============举个当时我就震惊了的例子===============


看到在stackoverflow上看到有人求这样一个数据结构:



  • Close to O(1) performance for as many of the following four operations.
  • Maintaining sorted order while inserting an object into the container.
  • Ability to peek at last value (the largest value) contained in the object.
  • Allowing for pops on both sides (getting the smallest or largest values).
  • Capability of getting the total size or number of objects being stored.
  • Being a ready made solution like the code in Python's standard library.


然后真的可以implement出来
  1. import collections
  2. import bisect

  3. class FastTable:

  4.     def __init__(self):
  5.         self.__deque = collections.deque()

  6.     def __len__(self):
  7.         return len(self.__deque)

  8.     def head(self):
  9.         return self.__deque.popleft()

  10.     def tail(self):
  11.         return self.__deque.pop()

  12.     def peek(self):
  13.         return self.__deque[-1]

  14.     def insert(self, obj):
  15.         index = bisect.bisect_left(self.__deque, obj)
  16.         self.__deque.rotate(-index)
  17.         self.__deque.appendleft(obj)
  18.         self.__deque.rotate(index)
复制代码
对此我只想表示牛,并且我硬生生的用它来解过人家不是要这种思路的题目。


有想到的再补充,也欢迎任何技巧分享





补充内容 (2016-10-28 00:40):
Python有built-inheap,是min heap.  heapq,如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5。

评分

参与人数 7大米 +115 收起 理由
Pro MacBook + 5 给你点个赞!
coldhenry + 3 很有用的信息!
D-Bazinga + 3 谢谢你的介绍!
wanchaoa + 3 感谢分享!
豌豆芽儿KD + 1 感谢分享!
wwtpcsuper + 50
candy_shmily + 50

查看全部评分


上一篇:前序遍历 OR 后序遍历
下一篇:sort一个array里的每一个elements不是array本身,复杂度是什么?
我的人缘0
LumiG 发表于 2017-2-15 19:13:16 | 显示全部楼层
本楼: 【顶】   100% (1)
 
 
0% (0)   【踩】
全局: 顶  97% (85)
 
 
2% (2)  踩
个人觉得python绝对是最适合面试的语言了,没有之一,真的。代码简洁,思路清晰,语法糖多,写起来快,可以很好的专注解决问题。我和用java的小伙伴一起刷题,人家看我写的代码,分分钟想屠尽python狗。。。
回复

使用道具 举报

全球28万学生4.7分推荐
我的人缘0
elvenxzy 发表于 2016-10-25 09:18:27 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (4)
 
 
0% (0)  踩
赞一个楼主的分享,我也是刚入门。实在没什么能分享的。楼主把我能想到的都已经说了。
回复

使用道具 举报

我的人缘0
渣渣程序员 发表于 2016-10-25 09:42:24 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  87% (102)
 
 
12% (14)  踩
数据结构还有heapq这样的。

评分

参与人数 1大米 +4 收起 理由
OO0OO + 4 感谢分享!

查看全部评分

回复

使用道具 举报

我的人缘0
sy10017667 发表于 2016-10-25 10:30:11 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  88% (197)
 
 
11% (25)  踩
求python书推荐!看到多少函数算够?

21.000+ students read the Road to learn React. The course weaves all the opinionated roadmaps into one roadmap to master React. It gives you all the fundamentals in React. You will build a Hacker News App along the way.

回复

使用道具 举报

我的人缘0
jedihy 发表于 2016-10-25 23:44:00 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  78% (67)
 
 
21% (18)  踩
最后那个插入是o(n)的
回复

使用道具 举报

我的人缘0
 楼主| OO0OO 发表于 2016-10-26 01:23:49 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (114)
 
 
5% (6)  踩
jedihy 发表于 2016-10-25 23:44
最后那个插入是o(n)的

是最后那个数据结构么? 所以是题主也写的是 Close  to,毕竟真心O(1)不太现实
回复

使用道具 举报

我的人缘0
 楼主| OO0OO 发表于 2016-10-26 01:27:14 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (114)
 
 
5% (6)  踩
sy10017667 发表于 2016-10-25 10:30
求python书推荐!看到多少函数算够?

市面上的各种书入门都不错,比如 Learn Python the hard way

其实我觉得过一遍基础的语法就可以开始用起来,然后边用边学吧

然后如果你已经学过,只是要再熟悉语法的话,我推荐刚看到的这个 千行代码入门Python

With React+D3v4 you'll learn the basics of building fast data visualization components in about an hour.

回复

使用道具 举报

我的人缘0
mayuki 发表于 2016-10-26 01:41:33 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  92% (53)
 
 
7% (4)  踩
那个填list填0的陷阱我就犯过,debug了半天,我只要改一个value连着一串全被改了
回复

使用道具 举报

我的人缘0
justin 发表于 2016-10-26 02:18:26 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  82% (396)
 
 
17% (85)  踩
印象中python 3里range就是generator了,不需要特别指定xrange。

另外collections是神器,就像C++的stl还有Java的collections一样,极大提高效率
回复

使用道具 举报

我的人缘0
jedihy 发表于 2016-10-26 04:20:22 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  78% (67)
 
 
21% (18)  踩
justin 发表于 2016-10-26 02:18
印象中python 3里range就是generator了,不需要特别指定xrange。

另外collections是神器,就像C++的stl ...

是的,py3 没有xrange的

Learn React.js, Redux & Immutable.js while building a weather app

回复

使用道具 举报

我的人缘0
jedihy 发表于 2016-10-26 04:22:04 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  78% (67)
 
 
21% (18)  踩
2维dp初始化还可以写成dp = [[0] * n for _ in xrange(n)]更短
回复

使用道具 举报

我的人缘0
zigzagloujie 发表于 2017-1-11 10:37:44 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  66% (2)
 
 
33% (1)  踩
请问下在哪里刷Python的题目呀?
回复

使用道具 举报

我的人缘0
g56422 发表于 2017-1-12 09:55:19 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  97% (40)
 
 
2% (1)  踩
python的heapq是有max heap的 只是被隱藏起來了而已還是可以調用
回复

使用道具 举报

我的人缘0
kobe24 发表于 2017-1-17 05:01:17 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  99% (151)
 
 
0% (1)  踩
楼主分享的很好啊
回复

使用道具 举报

头像被屏蔽
我的人缘0
在浙里 发表于 2017-1-17 22:24:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

我的人缘0
 楼主| OO0OO 发表于 2017-2-1 04:59:17 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (114)
 
 
5% (6)  踩
zigzagloujie 发表于 2017-1-11 10:37
请问下在哪里刷Python的题目呀?

leetcode支持python刷题啊
回复

使用道具 举报

我的人缘0
 楼主| OO0OO 发表于 2017-2-1 04:59:39 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (114)
 
 
5% (6)  踩
在浙里 发表于 2017-1-17 22:24
楼主太给力了,跟叫兽有的一拼

感人感人 承让承让
回复

使用道具 举报

我的人缘0
xwjabc 发表于 2017-2-10 06:17:52 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (1)
 
 
0% (0)  踩
加一个 collections.defaultdict 好用~
回复

使用道具 举报

我的人缘0
5919393 发表于 2017-2-15 14:42:39 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
赞楼主!谢谢楼主分享!我也是最近刚开始用Python刷题,看到这个帖子更加坚定了把Python作为首选的念头!如果将来遇到好的,定来分享交流!
回复

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地论坛声明

GMT+8, 2018-9-23 22:40

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表