最近一直在自學(xué)python,剛學(xué)習(xí)完基礎(chǔ)知識(shí),但一看到題目,就兩眼一抹黑,實(shí)在是懷疑自己有沒有學(xué)過(guò)python。向一些python大神請(qǐng)教,給的建議都是要多接觸項(xiàng)目,在項(xiàng)目中學(xué)習(xí)。下面我就把自己在leetcode上做的一些簡(jiǎn)單但又不錯(cuò)的題目分享給大家,希望入門的小伙伴們刷一下,大神自動(dòng)忽略哈。

1.能被3或5整除的1000以內(nèi)的數(shù)字和。
方法一:
sum = 0
for i in range(1,1000):
??if i % 3== 0 or i % 5 == 0:
?????sum = sum + i
print(sum)
這個(gè)方法代碼簡(jiǎn)單,也很容易理解,但是運(yùn)行的效率低。雖然自己是一個(gè)小白,但也要有一顆成為大神的心,經(jīng)過(guò)自己各種嘗試,于是有了第二種方法。
方法二:
在1-1000中,3的倍數(shù)最小的是3,最大的是999。5的倍數(shù)最小的是5,最大的是995。3和5的倍數(shù)其中肯定有交集,而他們肯定是15的倍數(shù),那么,15的倍數(shù)最小的是15,最大的是990。所以,我們要的答案應(yīng)該是:3的倍數(shù)和+5的倍數(shù)和-15的倍數(shù)的和(交集)。
defsum_mod(min,max):
??? return(max/min)*(min+max)/2
print(sum_mod(3,999)+sum_mod(5,995)-sum_mod(15,990))
2.在一個(gè)數(shù)組里面移除指定的數(shù)字,并返回一個(gè)從大到小排序的新數(shù)組。比如:nums=[1,6,6,3,6,2,10,2,100],remove_num=6,要求返回時(shí)nums=[1,2,3,10,100]。
方法一:
nums =[1,6,6,3,6,2,10,2,100]
while 6 in nums:
? nums.remove(6)
print(nums)
在這里我們用到了while循環(huán)。因?yàn)橐獎(jiǎng)h除的值在列表中出現(xiàn)多次,就需要使用循環(huán)來(lái)判斷是否刪除了所有這樣的值。
方法二:
>>>nums = [1, 6, 6, 3, 6, 2, 10, 2, 100]
>>>newnums = list(filter(lambda x:x!=6, nums))
>>>print(sorted(newnums,reverse=True))
該方法中用到了python內(nèi)置函數(shù)filter(),它主要用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象,如果要轉(zhuǎn)換為列表,可以使用list()來(lái)轉(zhuǎn)換。
函數(shù)filter()的語(yǔ)法是:filter(function,iterable),function——判斷函數(shù);iterable——可迭代對(duì)象。
此外,這種方法中還用到了lambda()函數(shù)。Lambda表示匿名函數(shù),冒號(hào)前面的x表示函數(shù)參數(shù)匿名函數(shù)有限制,只能有一個(gè)表達(dá)式,不用寫return,返回值就是該表達(dá)式的結(jié)果。
方法還使用了sorted()對(duì)列表進(jìn)行臨時(shí)排序。函數(shù)sorted()能夠按特定順序顯示列表,同時(shí)不影響它們?cè)诹斜碇械脑寂帕许樞颉5枰⒁獾氖?,調(diào)用函數(shù)sorted()后,列表元素排列順序并沒有變。如果要與字母相反順序顯示列表,可向函數(shù)sorted()傳遞參數(shù)reverse=True。
3.從排序好的任意組列表里面刪除重復(fù)元素(你不知道列表里面有多少個(gè)重復(fù)的元素)。比如:nums=[1,3,3,5,5,8,10,10,100],處理完之后是[1,3,5,8,10,100]。
nums =[1,3,3,5,5,8,10,10,100,100]
print(sorted(set(nums)))
答案中用到set()函數(shù)。Set()函數(shù)創(chuàng)建一個(gè)無(wú)序不重復(fù)元素集,可進(jìn)行關(guān)系測(cè)試,刪除重復(fù)數(shù)據(jù),還可以計(jì)算交集、差集、并集等。函數(shù)的語(yǔ)法是:set([iterable]),iterable——可迭代的對(duì)象,該函數(shù)會(huì)返回一個(gè)新的集合對(duì)象。
4.從排序的數(shù)組里面,刪除重復(fù)的元素。重復(fù)的數(shù)字最多只能出現(xiàn)2次。nums=[1,1,1,2,2,3],要求返回nums=[1,1,2,2,3]。
defquestion4(nums=[1,1,1,2,2,3]):
??? from collections import Counter
??? print(Counter(nums))
??? for k,v in Counter(nums).items():
??????? if v > 2:
??????????? nums.remove(k)
??? print(nums)
question4(nums=[1,1,1,2,2,3])
上述方法用到了python標(biāo)準(zhǔn)庫(kù)——collections模塊的Counter類。
collections模塊自python2.4版本開始被引入,包含了dict、set、list、tuple以外的一些特殊的容器類型。
Counter類的目的是用來(lái)跟蹤值出現(xiàn)的次數(shù)。它是一個(gè)無(wú)序的容器類型,以字典的鍵值對(duì)形成存儲(chǔ),其中元素作為key,其計(jì)數(shù)作為vaule。計(jì)數(shù)值可以是任意的Interger(包括0和負(fù)數(shù))。
通過(guò)實(shí)戰(zhàn)來(lái)提高自己的功力,我覺得是一個(gè)很好的方法,但是不要貪多方面突破。要從一個(gè)點(diǎn)突破,以戰(zhàn)養(yǎng)練,以練養(yǎng)戰(zhàn)。我也是一個(gè)python小白,自己才疏學(xué)淺,很多地方不懂,如果有寫的不到位的地方,歡迎小伙伴們拍磚。