實踐案例:Python22個構造函數法-助力數據挖掘與分析
摘要:a=repeat('oop。print (arr)。
如果你經常用python做一些小的項目玩,或者用python做一些爬蟲,又或者你去一些網站刷題,那麼必將面對一個問題——寫函數。
“寫函數”也就是自己寫一個算法,用來實現一些功能。比如最簡單的給電腦兩個參數,讓他計算這兩個參數的關係。
下邊獻上22個函數構造練習,將會助力大家在數據挖掘與分析方面更進一步!
建議大家收藏此文,有時間在自己的環境裏親自跑一遍加深理解。
兩個變量互換
兩個變量可以通過這種方式互相互換着賦值
a = 5
b = 10
a, b = b, a
print(a) # 10
print(b) # 5
# 這個看起來不是函數,但是這種用法在函數中常用
檢查是不是偶數
這個功能主要展示的不是快速判斷是不是偶數,而是bool判斷的用法.因爲10可以被2整除,所以餘數爲0,因此它是==0的,如果換成`is_even(3)`那就返回False了。
def is_even(num):
return num % 2 == 0
is_even(10) # True
分割一個字符串爲一個列表
這個案例使用換行符分割的,實際應用中,隨機應變。
def split_lines(s):
return s.split('\n')
split_lines('50\n python\n snippets')
# ['50', ' python', ' snippets']
查找對象使用內存的大小
這個例子中,調用了sys的看內存佔用情況函數。數字5佔了28內存空間大小,我把這個數字加到9999返回依然是28
import sys
print(sys.getsizeof(5)) # 28
print(sys.getsizeof("Python")) # 55
翻轉字符串
這個案例告訴我們字符串的翻轉用法,相應的簡單字符串可以翻轉,以後的圖片\音頻\視頻,一樣可以翻轉.如果你在一個函數里用這個功能,可以解決某些場景裏的問題。
language = "sumer-minus" # SUMER是我公衆號,minus是我一個網名
reversed_language = language[::-1]
print(reversed_language) # sunim-remus
打印字符串x遍的小函數
從這裏提取兩個概念:1如何打印n遍,理解函數調用
def repeat(string, n):
return (string * n)
a=repeat('oop!',10)
print(a)
>>>oop!oop!oop!oop!oop!oop!oop!oop!oop!oop!
檢查一個字符串是否與他的翻轉相同
這個小代碼把字符串翻轉,和bool又一次加深理解
def palindrome(string):
return string == string[::-1]
print(palindrome('python')) # False
把一個列表拼裝成字符串
用到了列表join方法,數據分析中可能用的多的是pandas的DataFrame格式的矩陣、張量,但一維這些東西一樣會遇到使用。
strings = ['老虎', '老鼠', '蟑螂']
print('kill'.join(strings))
# 老虎kill老鼠kill蟑螂
將兩個列表刪除重複項併合並
如何將兩個列表合併並扣除其中的重複項呢?可以看看這個方法,看起來是不是挺“卑鄙”的。挖python牆角感覺,但更好的方法還確實沒想出來。實際分析中去重可能不多,但統計衆數比較多,如果是string、列表,如何統計重複內容數量,思路類似。
def union(a,b):
return list(set(a + b))
union([1, 2, 3, 4, 5], [6, 2, 8, 1, 4])
# 答案:[1,2,3,4,5,6,8]
將列表去重
def unique_elements(numbers):
return list(set(numbers))
unique_elements([1, 2, 3, 2, 4])
# 答案:[1, 2, 3, 4]
找到一組數字的均值
雖然有mean函數,但比如你想自己算依稀的東西用到mean的時候,你可以自己造個,也就兩行而已。
def average(*args):
return sum(args, 0.0) / len(args)
average(5, 8, 2)
# 5.0
檢查一個數組是不是都是唯一的數值
def unique(list):
if len(list)==len(set(list)):
print("所有數據都是唯一的")
else:
print("並不唯一")
unique([1,2,3,4,5])
# 所有數據都是唯一的
找到列表頻率最大的數據
def most_frequent(list):
return max(set(list), key = list.count)
numbers = [1, 2, 3, 2, 4, 3, 1, 3]
most_frequent(numbers)
# 3
角度變弧度
π在math 庫中是有定義的,就叫做math.pi
import math
def degrees_to_radians(deg):
return (deg * math.pi) / 180.0
degrees_to_radians(90)
# 1.5707963267948966
打印運行計算花費時間
這個時間跟電腦速度有關
import time
start_time = time.time()
a,b = 5,10 #隨便一個過程
c = a+b #隨便一個過程
end_time = time.time()
time_taken = (end_time- start_time)*(10**6)
print("運行這個耗費微秒數爲:", time_taken)
# 運行這個耗費微秒數爲: 2.1457672119140625
找到一組數的最大公因數
藉助工具functools
from functools import reduce
import math
def gcd(numbers):
return reduce(math.gcd, numbers)
gcd([24,108,90])
# 6
使用lambda公式
x = lambda a, b, c : a + b + c
print(x(5, 10, 20))
# 35
# 或者也可以這樣
def x(a, b, c):
return a + b + c
print(x(5, 10, 30))
# 35
使用map函數
對一個列表每一個元素都進行操作的話,可以用map函數,下邊是個小案例
def multiply(n):
return n*n
list1 =[1, 2, 3]
result = list(map(multiply, list1))
print(result)
# [1, 4, 9]
使用過濾函數-filter
arr = [1, 2, 3, 4, 5]
def Even(x):
return list(filter(lambda x: x % 2 == 0, arr))
Even(arr)
# [2, 4]
列表連續操作
numbers = [1, 2, 3]
def squares(nums):
return [number**2 for number in nums]
squares(numbers)
# [1, 4, 9]
切片操作
切片用於從給定序列中提取元素的連續序列或子序列。以下函數用於合併兩個切片操作的結果。首先,我們將列表從索引d切到末尾,然後從開始切成索引d。
def rotate(arr, d):
return arr[d:] + arr[:d]
if __name__ == '__main__':
arr = [1, 2, 3, 4, 5]
arr = rotate(arr, 2)
print (arr)
# 結果:[3, 4, 5, 1, 2]
使用鏈功能
最後的代碼段用於從一行開始調用多個函數並評估結果。
def add(a, b):
return a + b
def subtract(a, b):
return a - b
a, b = 5, 10
print((subtract if a > b else add)(a, b)) # 15
print((subtract if a < b else add)(a, b)) # -5
希望這22個函數構造思路能讓大家有一些的進步收穫!
覺得有用,點個在看唄!