实践案例:Python22个构造函数法-助力数据挖掘与分析

恋习Python

共 3704字,需浏览 8分钟

 · 2020-01-04

9c6ed95bf36bf309732471de2c883792.webp

如果你经常用python做一些小的项目玩,或者用python做一些爬虫,又或者你去一些网站刷题,那么必将面对一个问题——写函数。


“写函数”也就是自己写一个算法,用来实现一些功能。比如最简单的给电脑两个参数,让他计算这两个参数的关系。


下边献上22个函数构造练习,将会助力大家在数据挖掘与分析方面更进一步!


建议大家收藏此文,有时间在自己的环境里亲自跑一遍加深理解。




01

两个变量互换


两个变量可以通过这种方式互相互换着赋值


a = 5                               
b = 10                                                     
a, b = b, a    
print(a) # 10    
print(b) # 5
# 这个看起来不是函数,但是这种用法在函数中常用



02

检查是不是偶数


这个功能主要展示的不是快速判断是不是偶数,而是bool判断的用法.因为10可以被2整除,所以余数为0,因此它是==0的,如果换成`is_even(3)`那就返回False了。


def is_even(num):
    return num % 2 == 0
is_even(10)  # True



03

分割一个字符串为一个列表


这个案例使用换行符分割的,实际应用中,随机应变。


def split_lines(s):
    return s.split('\n')

split_lines('50\n python\n snippets'
# ['50', ' python', ' snippets']



04

查找对象使用内存的大小


这个例子中,调用了sys的看内存占用情况函数。数字5占了28内存空间大小,我把这个数字加到9999返回依然是28


import sys
print(sys.getsizeof(5)) # 28
print(sys.getsizeof("Python")) # 55



05

翻转字符串


这个案例告诉我们字符串的翻转用法,相应的简单字符串可以翻转,以后的图片\音频\视频,一样可以翻转.如果你在一个函数里用这个功能,可以解决某些场景里的问题。


language = "sumer-minus"   # SUMER是我公众号,minus是我一个网名
reversed_language = language[::-1]
print(reversed_language)  # sunim-remus




06

打印字符串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!




07

检查一个字符串是否与他的翻转相同


这个小代码把字符串翻转,和bool又一次加深理解


def palindrome(string):
    return string == string[::-1]
print(palindrome('python')) # False




08

把一个列表拼装成字符串


用到了列表join方法,数据分析中可能用的多的是pandas的DataFrame格式的矩阵、张量,但一维这些东西一样会遇到使用。


strings = ['老虎''老鼠''蟑螂']
print('kill'.join(strings))

# 老虎kill老鼠kill蟑螂




09

将两个列表删除重复项并合并


如何将两个列表合并并扣除其中的重复项呢?可以看看这个方法,看起来是不是挺“卑鄙”的。挖python墙角感觉,但更好的方法还确实没想出来。实际分析中去重可能不多,但统计众数比较多,如果是string、列表,如何统计重复内容数量,思路类似。


def union(a,b):
    return list(set(a + b))

union([12345], [62814]) 

# 答案:[1,2,3,4,5,6,8]




10

将列表去重


def unique_elements(numbers):
    return list(set(numbers))

unique_elements([12324]) 

# 答案:[1, 2, 3, 4]




11

找到一组数字的均值


虽然有mean函数,但比如你想自己算依稀的东西用到mean的时候,你可以自己造个,也就两行而已。


def average(*args):
    return sum(args, 0.0) / len(args)
average(582

# 5.0




12

检查一个数组是不是都是唯一的数值


def unique(list):
    if len(list)==len(set(list)):
        print("所有数据都是唯一的")
    else:
        print("并不唯一")

unique([1,2,3,4,5]) 
# 所有数据都是唯一的




13

找到列表频率最大的数据


def most_frequent(list):
    return max(set(list), key = list.count)

numbers = [12324313]
most_frequent(numbers) 

# 3




14

角度变弧度


π在math 库中是有定义的,就叫做math.pi


import math

def degrees_to_radians(deg):
    return (deg * math.pi) / 180.0

degrees_to_radians(90
# 1.5707963267948966




15

打印运行计算花费时间

这个时间跟电脑速度有关


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




16

找到一组数的最大公因数


借助工具functools


from functools import reduce
import math
def gcd(numbers):
    return reduce(math.gcd, numbers)
gcd([24,108,90]) 
# 6




17

使用lambda公式


x = lambda a, b, c : a + b + c
print(x(51020)) 
# 35

# 或者也可以这样

def x(a, b, c): 
    return a + b + c
print(x(51030))  
# 35




18

使用map函数


对一个列表每一个元素都进行操作的话,可以用map函数,下边是个小案例


def multiply(n):
    return n*n

list1 =[123]
result = list(map(multiply, list1))
print(result)
# [1, 4, 9]




19

使用过滤函数-filter


arr = [12345]

def Even(x):
    return list(filter(lambda x: x % 2 == 0, arr))

Even(arr)  
# [2, 4]




20

列表连续操作


numbers = [123]

def squares(nums):
    return [number**2 for number in nums]

 squares(numbers)

# [1, 4, 9]




21

切片操作


切片用于从给定序列中提取元素的连续序列或子序列。以下函数用于合并两个切片操作的结果。首先,我们将列表从索引d切到末尾,然后从开始切成索引d。


def rotate(arr, d):
    return arr[d:] + arr[:d]

if __name__ == '__main__':
    arr = [12345]
    arr = rotate(arr, 2)
    print (arr) 

# 结果:[3, 4, 5, 1, 2]




22

使用链功能


最后的代码段用于从一行开始调用多个函数并评估结果。


def add(a, b):
    return a + b
def subtract(a, b):   
    return a - b
a, b = 510
print((subtract if a > b else add)(a, b))  # 15
print((subtract if a < b else add)(a, b))  # -5



希望这22个函数构造思路能让大家有一些的进步收获!

觉得有用,点个在看呗!

浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报