為什么10.24程序員節(jié),我卻需要加班?
1024程序員節(jié)
10.24程序員節(jié)
今天是1024程序猿/媛的節(jié)日,本來(lái)聽(tīng)起來(lái)不錯(cuò),可是想到明天項(xiàng)目轉(zhuǎn)測(cè),估計(jì)又不知道要加班到幾點(diǎn)就覺(jué)得心塞….為什么明明是程序員的節(jié)日,自己卻要加班!
是因?yàn)槲覜](méi)有穿格子衫?
程序員穿搭標(biāo)配
或是我的發(fā)際線不達(dá)標(biāo)?
程序員發(fā)際線
歸根結(jié)底,還是自身技術(shù)不過(guò)關(guān),頂多算是個(gè)搬磚的。
專(zhuān)業(yè)搬磚三十年
CTRL+C & CTRL+V
經(jīng)常遇到來(lái)面試的人員,問(wèn)到為什么從上家公司離職,回答的無(wú)外乎薪資問(wèn)題、感覺(jué)在公司沒(méi)有提升空間、想找個(gè)更好的發(fā)展平臺(tái),等等…但大家是否想過(guò),每天CTRL+C & CTRL+V的工作心態(tài)與if else 的編程思路,是公司沒(méi)有給你提升的空間,還是自己不想著自我提升呢?
細(xì)思恐極
一道簡(jiǎn)單習(xí)題引發(fā)的思考
今天無(wú)意間看到一道python習(xí)題,題目是這樣的:
有一個(gè)長(zhǎng)度在1-10000之間的數(shù)字列表,它們通過(guò)逗號(hào)分隔,其中涵蓋了0-1000的重復(fù)數(shù)字,比如1,4,3,5,3,5,4,該列表中有且僅有一個(gè)數(shù)字出現(xiàn)了奇數(shù)次,請(qǐng)通過(guò)代碼獲得該列表中,那個(gè)出現(xiàn)奇數(shù)次的數(shù)字。
常規(guī)解法
打眼一看這道題,感覺(jué)很無(wú)腦,無(wú)非是列表轉(zhuǎn)集合,然后for循環(huán)集合中的數(shù)字,通過(guò)count進(jìn)行計(jì)算就OK了么,代碼如下:
- 1# -*- coding: utf-8 -*-
- 2# @Author : 王翔
- 3# @WeChat : King_Uranus
- 4# @公眾號(hào) : 清風(fēng)Python
- 5# @GitHub : https://github.com/BreezePython
- 6# @Date : 2019/10/24 0:01
- 7# @Software : PyCharm
- 8# @version :Python 3.7.3
- 9# @File : 常規(guī)解法.py
- 10
- 11def func():
- 12 case_list = input("請(qǐng)輸入用例列表:").strip().split(',')
- 13 case_set = set(case_list)
- 14 for num in case_set:
- 15 if case_list.count(num) % 2:
- 16 print("找到符合要求的數(shù)字: {}".format(num))
- 17 break
- 18 else:
- 19 print("未找到符合要求的數(shù)字")
- 20
- 21if __name__ == '__main__':
- 22 func()
for else確實(shí)是python中比較特殊的一個(gè)語(yǔ)法結(jié)構(gòu),如果for循環(huán)正常執(zhí)行結(jié)束,則執(zhí)行else內(nèi)的語(yǔ)句。但程序說(shuō)的很清楚列表中有且僅有一個(gè)數(shù)字出現(xiàn)了奇數(shù)次,完全沒(méi)有必要畫(huà)蛇添足。
強(qiáng)行顯擺解法
大家都知道,如果面試的時(shí)候,你能將題目通過(guò)多種方式實(shí)現(xiàn),那么肯定會(huì)得到更高的認(rèn)可對(duì),然后有了下面的強(qiáng)行裝13解法:
- 1# -*- coding: utf-8 -*-
- 2# @Author : 王翔
- 3# @WeChat : King_Uranus
- 4# @公眾號(hào) : 清風(fēng)Python
- 5# @GitHub : https://github.com/BreezePython
- 6# @Date : 2019/10/24 0:10
- 7# @Software : PyCharm
- 8# @version :Python 3.7.3
- 9# @File : 2.groupby函數(shù).py
- 10
- 11from itertools import groupby
- 12
- 13def func():
- 14 case_list = input("請(qǐng)輸入用例列表:").strip().split(',')
- 15 list_group = groupby(case_list)
- 16 for k, v in list_group:
- 17 if len(list(v)) % 2:
- 18 print("找到符合要求的數(shù)字: {}".format(k))
- 19 break
- 20
- 21if __name__ == '__main__':
- 22 func()
itertools的groupby在日常中使用的比較少。groupby聚合函數(shù)與日常使用的sql等聚合方式一致,最終生成key:value的鍵值對(duì),value為迭代對(duì)象。
更為簡(jiǎn)潔的Counter
python中collections模塊附帶有一個(gè)Counter的函數(shù),使用它能讓我們裝13時(shí),顯得沒(méi)有上面那么僵硬:
- 1# -*- coding: utf-8 -*-
- 2# @Author : 王翔
- 3# @WeChat : King_Uranus
- 4# @公眾號(hào) : 清風(fēng)Python
- 5# @GitHub : https://github.com/BreezePython
- 6# @Date : 2019/10/24 0:58
- 7# @Software : PyCharm
- 8# @version :Python 3.7.3
- 9# @File : 3.Counter函數(shù).py
- 10
- 11from collections import Counter
- 12
- 13def func():
- 14 case_list = input("請(qǐng)輸入用例列表:").strip().split(',')
- 15 print(Counter(case_list))
- 16 for k, v in Counter(case_list):
- 17 if v % 2:
- 18 print("找到符合要求的數(shù)字: {}".format(k))
- 19 break
- 20
- 21if __name__ == '__main__':
- 22 func()
裝X翻車(chē)現(xiàn)場(chǎng)
本來(lái)這道題到這里該結(jié)束了,但仔細(xì)想想,還有什么方式可以用來(lái)統(tǒng)計(jì)元素?cái)?shù)量的奇偶性呢?不管是python還是java等其他編程語(yǔ)言,都存在一個(gè)異或的操作,是否可以使用它來(lái)實(shí)現(xiàn)。
1^3^1 = 3
然后想當(dāng)然的,我就寫(xiě)出了下面的代碼:
- 1from functools import reduce
- 2
- 3def func():
- 4 case_list = map(int, input("請(qǐng)輸入用例列表:").strip().split(','))
- 5 print(reduce(lambda x, y: x ^ y, case_list))
- 6
- 7if __name__ == '__main__':
- 8 func()
看上去沒(méi)啥毛病,使用reduce進(jìn)行逐一的異或比較,最終得到了結(jié)果,可真的是這樣嗎?不妨讓我們來(lái)舉個(gè)栗子:
1^2 =3 那么 1^2^3是多少?結(jié)果為0!
再寫(xiě)下去,還是可以使用一些其他的方式實(shí)現(xiàn)。說(shuō)這么多只是想告訴大家,遇到問(wèn)題,多主動(dòng)思考,即便想的是錯(cuò)的,也能從錯(cuò)誤中收獲知識(shí)。