Python 中让你相见恨晚的 20 个骚操作
今天和大家分享 20 個 Python 編程中新手必會的“騷操作”,使用的頻率超高!記得點贊,收藏哦!話不多說,進入正題!
1.列表推導式
使用列表推導式創建一個列表。
>>>?[n*10?for?n?in?range(5)] [0,?10,?20,?30,?40]2.交換變量
一行代碼交換兩個變量的值。
>>>?m,?n?=?1,?2 >>>?m,?n?=?n,?m >>>?m 2 >>>?n 13.連續比較
鏈式比較操作符。
>>>?m,?n?=?3,?'c' >>>?1?<?m?<?5 True >>>?'d'?<?n?<?'f' False4.序列切片
通過切片快速獲取序列片段。
>>>?lst?=?[1,?2,?3,?4,?5] >>>?lst[:3]??#?取前三個數 [1,?2,?3] >>>?lst[::-1]??#?逆序 [5,?4,?3,?2,?1] >>>?lst[::2]??#?步長為2 [1,?3,?5] >>>?lst[::-2]??#?逆序步長為2 [5,?3,?1]5.切片快速增刪序列
通過切片替換序列片段的值。
>>>?lst?=?[1,?2,?3,?4,?5] >>>?lst[1:3]?=?[] >>>?lst [1,?4,?5] >>>?lst[1:3]?=?['a',?'b',?'c',?'d'] >>>?lst [1,?'a',?'b',?'c',?'d']6.%timeit 計算運行時間
計算 10000 次列表推導式創建列表所用時間。
%timeit?-n?10000?[n?for?n?in?range(5)]#?2.41?μs?±?511?ns?per?loop?(mean?±?std.?dev.?of?7?runs,?10000?loops?each)7.三元表達式
獲取 m,n 中較大的值。
>>>?m?=?4 >>>?n?=?2 >>>?if?m?>?n:print('m') else:print('n')m >>>?'m'?if?m?>?n?else?'n' 'm'還有一種比較少見的寫法。
>>>?m?=?4 >>>?n?=?2 >>>?("n",?"m")[m?>?n] 'm'格式:(<on_true>, <on_false>)[condition]
8.解包(unpack)
可迭代對象都支持解包。
>>>?a,?b,?*c?=?[1,?2,?3,?4] >>>?a 1 >>>?b 2 >>>?c [3,?4] >>>?print(*range(3)) 0?1?29.lambda 匿名函數
lambda 函數可以接收任意多個參數 (包括可選參數) ,返回單個表達式值。 lambda 函數不能包含命令,只能包含一個表達式。
>>>?def?func(x,?y):return?x?*?y>>>?func(2,?3) 6 >>>?func?=?lambda?x,?y:?x?*?y >>>?func(2,?3) 610.map 序列映射
對序列中每一個元素調用指定函數,返回迭代器。
>>>?def?func(x):return?x?**?2>>>?list(map(func,?[1,2,3])) [1,?4,?9]使用 lambda 表達式。
>>>?list(map(lambda?x:?x?**?2,?[1,?2,?3])) [1,?4,?9]11.filter 過濾序列
過濾掉不符合條件的元素,返回迭代器。
>>>?def?func(x):?return?x?%?3?==?0>>>?list(filter(func,?[1,?2?,3])) [3]使用 lambda 表達式。
>>>?list(filter(lambda?x:?x?%?3?==?0,?[1,?2,?3])) [3]12.獲取序列組合
獲取兩個序列每個元素兩兩組合的結果。
>>>?list1?=?['a',?'b'] >>>?list2?=?['1',?'2'] >>>?[(m,?n)?for?m?in?list1?for?n?in?list2] [('a',?'1'),?('a',?'2'),?('b',?'1'),?('b',?'2')] >>>?from?itertools?import?product >>>?list(product(list1,?list2)) [('a',?'1'),?('a',?'2'),?('b',?'1'),?('b',?'2')]13.隨機選取序列元素
隨機選取序列中的一個元素。
>>>?from?random?import?choice >>>?lst?=?[1,?2,?3,?4] >>>?choice(lst) 3隨機選取序列中的多個元素(可重復)。k 值指定數量。
>>>?from?random?import?choices >>>?lst?=?[1,?2,?3,?4] >>>?choices(lst,?k=3) [4,?3,?4]隨機選取序列中的多個元素(不重復)。k 值指定數量。
>>>?from?random?import?sample >>>?lst?=?[1,?2,?3,?4] >>>?sample(lst,?k=3) [4,?3,?2]14.序列元素計數
統計序列每個元素出現的次數。
>>>?from?collections?import?Counter >>>?s?=?'python+py' >>>?counter?=?Counter(s) >>>?counter Counter({'p':?2,?'y':?2,?'t':?1,?'h':?1,?'o':?1,?'n':?1,?'+':?1})返回的結果類似字典,可以使用字典的相關方法。
>>>?counter.keys() dict_keys(['p',?'y',?'t',?'h',?'o',?'n',?'+']) >>>?counter.values() dict_values([2,?2,?1,?1,?1,?1,?1]) >>>?counter.items() dict_items([('p',?2),?('y',?2),?('t',?1),?('h',?1),?('o',?1),?('n',?1),?('+',?1)])統計出現次數最多的兩個元素。
>>>?counter.most_common(2) [('p',?2),?('y',?2)]15.字典排序
字典按照鍵(key)降序排序。
>>>?dic?=?{'d':?2,?'c':?1,?'a':?3,?'b':?4} >>>?sort_by_key?=?sorted(dic.items(),?key=lambda?x:?x[0],?reverse=False) >>>?{key:?value?for?key,?value?in?sort_by_key} {'a':?3,?'b':?4,?'c':?1,?'d':?2}字典按照值(value)降序排序。
>>>?dic?=?{'d':?2,?'c':?1,?'a':?3,?'b':?4} >>>?sort_by_value?=?sorted(dic.items(),?key=lambda?x:?x[1],?reverse=False) >>>?{key:?value?for?key,?value?in?sort_by_value} {'c':?1,?'d':?2,?'a':?3,?'b':?4}16.字典合并
>>>?dict1?=?{'name':?'靜香',?'age':?18} >>>?dict2?=?{'name':?'靜香',?'sex':?'female'}update() 更新字典。
字典推導式
元素拼接
chain() 可以將序列連接,返回可迭代對象。
collections.ChainMap 可以將多個字典或映射,并將它們合并。
在 Python3.5 以上的版本中,可以通過字典解包進行合并。
17.zip 打包
zip() 將序列中對應的元素打包成一個個的元組,然后返回由這些元組組成的迭代器。
如果序列的元素個數不一致,則返回列表長度與最短的對象相同。
>>>?list1?=?[1,?2,?3] >>>?list2?=?[4,?5,?6] >>>?list3?=?['a',?'b',?'c',?'d'] >>>?res?=?zip(list1,?list2) >>>?res <zip?object?at?0x0000013C13F62200> >>>?list(res) [(1,?4),?(2,?5),?(3,?6)] >>>?list(zip(list2,?list3)) [(4,?'a'),?(5,?'b'),?(6,?'c')]18.enumerate 遍歷
enumerate 函數可以將可迭代對象組合成一個索引序列,這樣遍歷時就可以同時獲取索引與對應的值。
>>>?lst?=?['a',?'b',?'c'] >>>?for?index,?char?in?enumerate(lst):print(index,?char)0?a 1?b 2?c19.any() & all()
any(iterable)
對于迭代過程中的元素 i,只有所有元素 bool(i) 的結果都為 False,any 的結果才返回 False。
如果迭代是空,返回 False。
all(iterable)
對于迭代過程中的元素 i,如果存在一個 bool(i) 的結果為 False,則 all 結果返回 False。
如果可迭代對象為空,則返回 True。
20.用 ** 代替 pow
求 x 的 y 次方,使用 ** 速度更快。
%timeit?-n?10000?c?=?pow(2,10) #?911?ns?±?107?ns?per?loop?(mean?±?std.?dev.?of?7?runs,?10000?loops?each) %timeit?-n?10000?c?=?2?**?10 #?131?ns?±?46.8?ns?per?loop?(mean?±?std.?dev.?of?7?runs,?10000?loops?each)對比Excel系列圖書累積銷量達15w冊,讓你輕松掌握數據分析技能,感興趣的同學可以直接在各大電商平臺搜索書名了解:
總結
以上是生活随笔為你收集整理的Python 中让你相见恨晚的 20 个骚操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么这届年轻人基本不走亲戚了?互联网“
- 下一篇: 销声匿迹了十几年的 ccd 相机,怎么又