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入門 |