为什么10.24程序员节,我却需要加班?

新闻
今天是1024程序猿/媛的节日,本来听起来不错,可是想到明天项目转测,估计又不知道要加班到几点就觉得心塞….为什么明明是程序员的节日,自己却要加班!

 1024程序员节

 

10.24程序员节

今天是1024程序猿/媛的节日,本来听起来不错,可是想到明天项目转测,估计又不知道要加班到几点就觉得心塞….为什么明明是程序员的节日,自己却要加班!

是因为我没有穿格子衫?

[[280072]] 

程序员穿搭标配

或是我的发际线不达标?

[[280073]] 

程序员发际线

归根结底,还是自身技术不过关,顶多算是个搬砖的。

[[280074]] 

专业搬砖三十年

CTRL+C & CTRL+V

经常遇到来面试的人员,问到为什么从上家公司离职,回答的无外乎薪资问题、感觉在公司没有提升空间、想找个更好的发展平台,等等…但大家是否想过,每天CTRL+C & CTRL+V的工作心态与if else 的编程思路,是公司没有给你提升的空间,还是自己不想着自我提升呢?

[[280075]] 

细思恐极

一道简单习题引发的思考

今天无意间看到一道python习题,题目是这样的:

有一个长度在1-10000之间的数字列表,它们通过逗号分隔,其中涵盖了0-1000的重复数字,比如1,4,3,5,3,5,4,该列表中有且仅有一个数字出现了奇数次,请通过代码获得该列表中,那个出现奇数次的数字。

常规解法

打眼一看这道题,感觉很无脑,无非是列表转集合,然后for循环集合中的数字,通过count进行计算就OK了么,代码如下:

  1.  1# -*- coding: utf-8 -*- 
  2.  2# @Author   : 王翔 
  3.  3# @WeChat   : King_Uranus 
  4.  4# @公众号    : 清风Python 
  5.  5# @GitHub   : https://github.com/BreezePython 
  6.  6# @Date     : 2019/10/24 0:01 
  7.  7# @Software : PyCharm 
  8.  8# @version  :Python 3.7.3 
  9.  9# @File     : 常规解法.py 
  10. 10 
  11. 11def func(): 
  12. 12    case_list = input("请输入用例列表:").strip().split(','
  13. 13    case_set = set(case_list) 
  14. 14    for num in case_set: 
  15. 15        if case_list.count(num) % 2: 
  16. 16            print("找到符合要求的数字: {}".format(num)) 
  17. 17            break 
  18. 18    else
  19. 19        print("未找到符合要求的数字"
  20. 20 
  21. 21if __name__ == '__main__'
  22. 22    func() 

for else确实是python中比较特殊的一个语法结构,如果for循环正常执行结束,则执行else内的语句。但程序说的很清楚列表中有且仅有一个数字出现了奇数次,完全没有必要画蛇添足。

强行显摆解法

大家都知道,如果面试的时候,你能将题目通过多种方式实现,那么肯定会得到更高的认可对,然后有了下面的强行装13解法:

  1.  1# -*- coding: utf-8 -*- 
  2.  2# @Author   : 王翔 
  3.  3# @WeChat   : King_Uranus 
  4.  4# @公众号    : 清风Python 
  5.  5# @GitHub   : https://github.com/BreezePython 
  6.  6# @Date     : 2019/10/24 0:10 
  7.  7# @Software : PyCharm 
  8.  8# @version  :Python 3.7.3 
  9.  9# @File     : 2.groupby函数.py 
  10. 10 
  11. 11from itertools import groupby 
  12. 12 
  13. 13def func(): 
  14. 14    case_list = input("请输入用例列表:").strip().split(','
  15. 15    list_group = groupby(case_list) 
  16. 16    for k, v in list_group: 
  17. 17        if len(list(v)) % 2: 
  18. 18            print("找到符合要求的数字: {}".format(k)) 
  19. 19            break 
  20. 20 
  21. 21if __name__ == '__main__'
  22. 22    func() 

itertools的groupby在日常中使用的比较少。groupby聚合函数与日常使用的sql等聚合方式一致,最终生成key:value的键值对,value为迭代对象。

更为简洁的Counter

python中collections模块附带有一个Counter的函数,使用它能让我们装13时,显得没有上面那么僵硬:

  1.  1# -*- coding: utf-8 -*- 
  2.  2# @Author   : 王翔 
  3.  3# @WeChat   : King_Uranus 
  4.  4# @公众号    : 清风Python 
  5.  5# @GitHub   : https://github.com/BreezePython 
  6.  6# @Date     : 2019/10/24 0:58 
  7.  7# @Software : PyCharm 
  8.  8# @version  :Python 3.7.3 
  9.  9# @File     : 3.Counter函数.py 
  10. 10 
  11. 11from collections import Counter 
  12. 12 
  13. 13def func(): 
  14. 14    case_list = input("请输入用例列表:").strip().split(','
  15. 15    print(Counter(case_list)) 
  16. 16    for k, v in Counter(case_list): 
  17. 17        if v % 2: 
  18. 18            print("找到符合要求的数字: {}".format(k)) 
  19. 19            break 
  20. 20 
  21. 21if __name__ == '__main__'
  22. 22    func() 

装X翻车现场

本来这道题到这里该结束了,但仔细想想,还有什么方式可以用来统计元素数量的奇偶性呢?不管是python还是java等其他编程语言,都存在一个异或的操作,是否可以使用它来实现。

1^3^1 = 3

然后想当然的,我就写出了下面的代码:

  1. 1from functools import reduce 
  2. 3def func(): 
  3. 4    case_list = map(int, input("请输入用例列表:").strip().split(',')) 
  4. 5    print(reduce(lambda x, y: x ^ y, case_list)) 
  5. 7if __name__ == '__main__'
  6. 8    func() 

看上去没啥毛病,使用reduce进行逐一的异或比较,最终得到了结果,可真的是这样吗?不妨让我们来举个栗子:

1^2 =3 那么 1^2^3是多少?结果为0!

再写下去,还是可以使用一些其他的方式实现。说这么多只是想告诉大家,遇到问题,多主动思考,即便想的是错的,也能从错误中收获知识。

责任编辑:华轩 来源: 清风Python
相关推荐

2020-06-28 14:36:27

程序员技能开发者

2015-09-24 09:04:36

程序员

2011-04-19 09:59:47

工资程序员

2011-05-25 14:46:16

程序员

2018-10-24 17:18:06

程序员技能开发者

2021-05-18 06:51:37

CPU程序员系统

2017-12-15 13:07:35

程序员代码练习

2019-10-24 09:29:04

程序员程序员节女朋友

2015-09-16 08:43:16

2015-08-11 09:18:44

程序员最好

2023-12-26 18:47:32

2012-09-12 15:48:34

程序员节程序员

2014-08-15 11:07:09

程序员

2016-03-15 08:51:12

程序员生活怪异

2011-12-20 09:01:25

.NET

2012-09-06 10:30:58

2019-03-11 08:56:50

程序员美国工作

2015-07-03 09:37:21

程序员外包公司

2013-03-19 10:18:07

程序员

2011-08-11 14:52:59

点赞
收藏

51CTO技术栈公众号