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小白,自己才疏學淺,很多地方不懂,如果有寫的不到位的地方,歡迎小夥伴們拍磚。