1. 程式人生 > >這幾個技巧,值得每一個學Python人收藏

這幾個技巧,值得每一個學Python人收藏

閱讀本文大概需要3分鐘

閱讀本文大概需要3分鐘

1.一行程式碼,巧妙求解

列出1到20的數字,若是3的倍數就用apple代替,若是5的倍數就用orange代替,若既是3的倍數又是5的倍數就用appleorange代替

print ['apple'[i%35::]+'orange'[i%56::] or i for i in range(1,21)]

點評:字串的處理我自認為掌握的非常熟練了,各種奇淫技巧都已經爛熟於心,但是當我看到上面這個解法的時候,徹底跪了太巧妙了.

2.推導列表生成字典

推導列表我相信大家都用過,但是推導列表還能生成字典,非常簡潔.

點評:字典的生成相信每個人都會,但是用推導列表生成字典並不是時刻都會想到的.

3.漂亮的zip生成

**print dict(zip('abcd',range(4))) **

{'a': 0, 'c': 2, 'b': 1, 'd': 3}

chinese=[90,70,96]

eng=[80,78,90]

math=[96,84,80]

total=[]

for c,m,e in zip(chinese,eng,math):

total.append(c+m+e)

print total

[266, 232, 266]

點評:zip是一個非常重要的函式,非常方便.熟悉掌握zip幫我大幅的減少函式的程式碼和複雜度,並且提高效率,zip是我最喜歡的函式之一!

4.if val is not None

為啥會這樣寫呢,為啥不能寫成 if val ,不知道大家有沒有思考過這樣問題.

其實這兩者是有區別的:比如val 可能為'',0,None,[],{}

如果寫成if val 會把'',0,[],{}這樣的情況也包含在裡面,有的時候我們其實只想過濾掉不為None的情況

點評:平時學會推敲很重要,為啥有的程式碼要這樣寫,有的要那樣寫,比如==和is的區別。

5.list分組

有的時候我們希望對一個list進行分組,有什麼好的辦法呢

a=[3, 8, 9, 4, 1, 10, 6, 7, 2]

print [a[i:i+3] for i in xrange(0,len(a),3)]

[[3, 8, 9], [4, 1, 10], [6, 7, 2]]

點評:通過一個推導列表和切片的完美組合,就可以輕鬆化解.

6.遞迴的好例子

比如有一個巢狀的列表,裡面嵌套了很多層,有列表有元組,層層巢狀,如何把它轉換成只有一層的列表,必須要用遞迴也能解決

點評:遞迴覺得是一個好東西,雖然理解起來很複雜,但是可以用很少的程式碼解決很多複雜的問題.

7.查詢列表裡面的某一個值

有的時候,我們需要從比如一個很長的列表裡面,找到某一個或者某一類的元素,怎麼辦? 很簡單用高階函式filter()

點評:Python裡的高階函式一直是我的最愛,像map,zip,filter應該要熟練掌握.

8.一個不錯的namedtuple class

namedtuple是collections模組裡面的一個非常有用的函式,類似一個小的迷你類,但是省去了類的一些複雜結構,可以像訪問類的變數一樣去訪問,非常酷.

9.非常漂亮的取列表,字典裡面的排序

點評:利用heapq函式可以非常方便的對單列表,單字典進行排序,而對於複雜的字典組合列表,排序取值也很方便,其實用sorted也可以,二者有異曲同工之妙.

結論:

其實Python的技巧非常非常多,大家平時的寫程式碼或者讀程式碼的時候要注意收集,特別是有一些精妙的招數,一時半會無法領悟,可以記下來,慢慢思考,總有一天會對你的功力增長大有裨益.

給大家整理了Python很全面的資料和教程可以下載,加群943752371即可