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

1024程序员节

10.24程序员节

今天是1024程序猿/媛的节日,本来听起来不错,可是想到明天项目转测,估计又不知道要加班到几点就觉得心塞…为什么明明是程序员的节日,自己却要加班!
是因为我没有穿格子衫?
程序员穿搭标配
或是我的发际线不达标?
程序员发际线
归根结底,还是自身技术不过关,顶多算是个搬砖的
专业搬砖三十年

CTRL+C & CTRL+V

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

一道简单习题引发的思考

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

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

常规解法

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

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @WeChat   : King_Uranus
# @公众号    : 清风Python
# @GitHub   : https://github.com/BreezePython
# @Date     : 2019/10/24 0:01
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : 常规解法.py

def func():
    case_list = input("请输入用例列表:").strip().split(',')
    case_set = set(case_list)
    for num in case_set:
        if case_list.count(num) % 2:
            print("找到符合要求的数字: {}".format(num))
            break
    else:
        print("未找到符合要求的数字")

if __name__ == '__main__':
    func()

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

强行显摆解法

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

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @WeChat   : King_Uranus
# @公众号    : 清风Python
# @GitHub   : https://github.com/BreezePython
# @Date     : 2019/10/24 0:10
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : 2.groupby函数.py

from itertools import groupby

def func():
    case_list = input("请输入用例列表:").strip().split(',')
    list_group = groupby(case_list)
    for k, v in list_group:
        if len(list(v)) % 2:
            print("找到符合要求的数字: {}".format(k))
            break

if __name__ == '__main__':
    func()

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

更为简洁的Counter

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

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @WeChat   : King_Uranus
# @公众号    : 清风Python
# @GitHub   : https://github.com/BreezePython
# @Date     : 2019/10/24 0:58
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : 3.Counter函数.py

from collections import Counter

def func():
    case_list = input("请输入用例列表:").strip().split(',')
    print(Counter(case_list))
    for k, v in Counter(case_list):
        if v % 2:
            print("找到符合要求的数字: {}".format(k))
            break

if __name__ == '__main__':
    func()

装X翻车现场

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

from functools import reduce

def func():
    case_list = map(int, input("请输入用例列表:").strip().split(','))
    print(reduce(lambda x, y: x ^ y, case_list))

if __name__ == '__main__':
    func()

看上去没啥毛病,使用reduce进行逐一的异或比较,最终得到了结果,可真的是这样吗?不妨让我们来举个栗子:
1^2 =3 那么 1^2^3是多少?结果为0!

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

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
当然如果你是Pythoner,欢迎访问我的github下载:https://github.com/BreezePython
其中包含了所有往期公众号的代码汇总与一些小项目集合。
期待你关注我的公众号 清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
清风Python

近期文章精选

用生动的案例一步步带你学会python多线程模块
目不识丁的我使用Python开发汉字注音小工具
Python为微信头像任意添加装饰!
如何把图片变得炫酷多彩,Python教你这样实现!
Python开发英语单词自测工具,助你逆袭单词王!
使用Python开发小说下载器,不再为下载小说而发愁
Python开发GUI工具介绍:将图片转化为素描画!
Flask开发VIP版 HttpServer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值