標籤:

Python入門必刷題目

最近一直在自學python,剛學習完基礎知識,但一看到題目,就兩眼一抹黑,實在是懷疑自己有沒有學過python。向一些python大神請教,給的建議都是要多接觸項目,在項目中學習。下面我就把自己在leetcode上做的一些簡單但又不錯的題目分享給大家,希望入門的小夥伴們刷一下,大神自動忽略哈。

1.能被3或5整除的1000以內的數字和。

方法一:

sum = 0

for i in range(1,1000):

if i % 3== 0 or i % 5 == 0:

sum = sum + i

print(sum)

這個方法代碼簡單,也很容易理解,但是運行的效率低。雖然自己是一個小白,但也要有一顆成為大神的心,經過自己各種嘗試,於是有了第二種方法。

方法二:

在1-1000中,3的倍數最小的是3,最大的是999。5的倍數最小的是5,最大的是995。3和5的倍數其中肯定有交集,而他們肯定是15的倍數,那麼,15的倍數最小的是15,最大的是990。所以,我們要的答案應該是:3的倍數和+5的倍數和-15的倍數的和(交集)。

def sum_mod(min,max):

return(max/min)*(min+max)/2

print(sum_mod(3,999)+sum_mod(5,995)-sum_mod(15,990))

2.在一個數組裡面移除指定的數字,並返回一個從大到小排序的新數組。比如:nums=[1,6,6,3,6,2,10,2,100],remove_num=6,要求返回時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循環。因為要刪除的值在列表中出現多次,就需要使用循環來判斷是否刪除了所有這樣的值。

方法二:

>>> nums = [1, 6, 6, 3, 6, 2, 10, 2, 100]

>>> newnums = list(filter(lambda x:x!=6, nums))

>>> print(sorted(newnums,reverse=True))

該方法中用到了python內置函數filter(),它主要用於過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象,如果要轉換為列表,可以使用list()來轉換。

函數filter()的語法是:filter(function,iterable),function——判斷函數;iterable——可迭代對象。

此外,這種方法中還用到了lambda()函數。Lambda表示匿名函數,冒號前面的x表示函數參數匿名函數有限制,只能有一個表達式,不用寫return,返回值就是該表達式的結果。

方法還使用了sorted()對列表進行臨時排序。函數sorted()能夠按特定順序顯示列表,同時不影響它們在列表中的原始排列順序。但需要注意的是,調用函數sorted()後,列表元素排列順序並沒有變。如果要與字母相反順序顯示列表,可向函數sorted()傳遞參數reverse=True。

3.從排序好的任意組列表裡面刪除重複元素(你不知道列表裡面有多少個重複的元素)。比如: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()函數。Set()函數創建一個無序不重複元素集,可進行關係測試,刪除重複數據,還可以計算交集、差集、並集等。函數的語法是:set([iterable]),iterable——可迭代的對象,該函數會返回一個新的集合對象。

4.從排序的數組裡面,刪除重複的元素。重複的數字最多只能出現2次。nums=[1,1,1,2,2,3],要求返回nums=[1,1,2,2,3]。

def question4(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標準庫——collections模塊的Counter類。

collections模塊自python2.4版本開始被引入,包含了dict、set、list、tuple以外的一些特殊的容器類型。

Counter類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的鍵值對形成存儲,其中元素作為key,其計數作為vaule。計數值可以是任意的Interger(包括0和負數)。

通過實戰來提高自己的功力,我覺得是一個很好的方法,但是不要貪多方面突破。要從一個點突破,以戰養練,以練養戰。我也是一個python小白,自己才疏學淺,很多地方不懂,如果有寫的不到位的地方,歡迎小夥伴們拍磚。


推薦閱讀:

TAG:Python入門 |