目录标题
- 1.替换
- 2.找局部最大值(极大值)
- 3.删除函数
- 4.合并数组
- 5.reshape的作用
- 6.用函数实现矩阵乘法
- 7.更新矩阵
- 8.递增序列的最大个数
- 10.累计窗口
- 11.
- 12.1-100的和
- 13,如何在函数内容修改全局变量 ---global
- python2与python3的区别?
- 14,字典删除键del和合并键update
- 15,列表去重,利用集合的特点
- 16,列表平方,并取出大于10的值 map(fan,list)
- 17,随机整数、小数、0-1间小数
- 18,字典根据键从小到大排序
- 19,统计字符串中每个单词出现的次数
- 20,字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"?
- 21,求出列表所有奇数并构造新列表a = [1,2,3,4,5,6,7,8,9,10]
- 22,列表推导式求列表所有奇数
- 23,合并两个列表
- 24,删除文件
- 25,日期
- 26,提高python运行效率的方法
import numpy as np
import pandas as pd
1.替换
利用np.where(b>30,30,b)
import numpy as np
np.random.seed(100)
a = np.random.uniform(1,50,10)
print(a)
b = np.clip(a,a_min=10,a_max=30)
print(b)
c = np.where(a<20,20,a)
c = np.where(b>30,30,b)
print(c)
2.找局部最大值(极大值)
利用np.diff(a)和np.sign(b1)
a = np.array([1, 3, 7, 1, 2, 6, 0, 1])
b1 = np.diff(a) # 沿着指定轴计算第N维的离散差值
b2 = np.sign(b1)
b3 = np.diff(b2)
print(b1) # [ 2 4 -6 1 4 -6 1] 后一个减前一个的差值
print(b2) # [ 1 1 -1 1 1 -1 1]
print(b3) # [ 0 -2 2 0 -2 2]
index = np.where(np.equal(b3, -2))[0] +1
print(index) # [2 5]
#返回a中极大值的坐标
3.删除函数
def delete(a, *b):
if type(a) == int:
a = str(a)
b = str(b)
c = a
for i in b:
if type(i) == str:
c = c.replace(i, '')
if type(i) != str:
for j in i:
c = c.replace(j, '')
return c
str1 = 'hi everyone!'
str1_cleared = delete(str1,'e')
print('str1_cleared:',str1_cleared) #str1_cleared: hi vryon!
str2_cleared = delete(str1,'e','y')
print('str2_cleared:',str2_cleared) #str2_cleared: hi vron!
str3_cleared = delete(str1, ['e', 'y'])
print('str3_cleared:', str3_cleared) #str3_cleared: hi vron!
str4_cleared = delete(str1, 'ev')
print('str1_cleared:',str4_cleared)
num1 = 1583759348534
num1_cleared = delete(num1,8,3)
print('num1_cleared:',num1_cleared) #num1_cleared: 15759454
num2_cleared = delete(num1,[8,3])
print('num2_cleared:',num2_cleared)
4.合并数组
print(np.c_[np.array([1,2]),np.zeros((2,3))])
#[[1. 0. 0. 0.]
# [2. 0. 0. 0.]]
print(np.r_[np.array([1,2]),np.zeros(2)])
#[1. 2. 0. 0.]
print(np.array([1,2]))
#[1 2]
5.reshape的作用
import numpy as np
target = np.arange(8).reshape(2,4)
print(target.reshape((4,2), order='C'))
print(target.reshape((4,2), order='F'))
6.用函数实现矩阵乘法
import numpy as np
m1 = np.random.rand(2,3)
m2 = np.random.rand(3,4)
res = np.empty((m1.shape[0],m2.shape[1]))
print(res)
for i in range(m1.shape[0]):
for j in range(m2.shape[1]):
item = 0
for k in range(m1.shape[1]):
item += m1[i][k]*m2[k][j]
res[i][j] = item
print((np.abs((m1@m2-res)<1e-15)).all())
7.更新矩阵
a = np.array(range(1,10)).reshape(3,3)
print(a)
def changejuzheng(a):
b = np.empty(a.shape)
for i in range(a.shape[0]):
for j in range(a.shape[1]):
item = 0
for k in range(a.shape[0]):
item += 1/a[i][k]
b[i][j] = a[i][j]*item
return b
print(changejuzheng(a))
#法二,同样能实现上面功能
b = a*(1/a).sum(1).reshape(-1,1)
print(b)
8.递增序列的最大个数
f = lambda x:np.diff(np.nonzero(np.r_[1,np.diff(x)!=1,1]))
print(f([1,2,5,6,7]))
9.rolling滑动窗口
import pandas as pd
# 导入 pandas
index = pd.date_range('2022-01-01',periods=6)
#创建日期序列
data = pd.DataFrame(np.arange(len(index)),index=index,columns=['test'])
#创建简单的pd.DataFrame
print(data)
#打印data
data['sum'] = data.test.rolling(3).sum()
#移动3个值,进行求和
data['mean'] = data.test.rolling(3).mean()
#移动3个值,进行求平均数
data['mean1'] = data.test.rolling(3,min_periods=2).mean()
print(data)
10.累计窗口
s = pd.Series([1, 3, 6, 10])
print(s.expanding().sum())
print(s.expanding().mean())
11.
print(np.nan != np.nan) #True
print(np.nan is np.nan) #True
12.1-100的和
print(sum(range(101)))
13,如何在函数内容修改全局变量 —global
5个python标准库:os与操作系统相关联的库,sys命令行参数 ,re正则匹配,math 数学运算 ,datetime处理日期时间
python2与python3的range(100)区别:
python返回列表
python3返回迭代器,节约内存
什么样的语言能够用装饰器:函数可以作为参数传递的语言,可以使用装饰器
python内建函数类型:整型int 布尔型bool 字符串str 列表list 元组tuple 字典dict
python2与python3的区别?
1。python3输出print(‘hi’) ,python2输出可以print(‘hi’)或者print ‘hi’ 去掉括号使用一个空格
2. python2的range(1,10)返回列表,python3返回迭代器,节约空间
3.python2使用ascii编码,python3使用utf-8编码
4。python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列
5.python2中为正常显示中文,引入coding声明,python3中不需要
6,python 中raw_input(),python3中input()函数
不可变数据类型:数值型,字符串型string,元组tuple
可变数据类型:列表list 字典dict
14,字典删除键del和合并键update
dic = {'name':'sz','num':123}
del dic['name']
print(dic)
dic2 = {'sex':'male'}
dic.update(dic2) #合并到了dic自身上面
print(dic)
15,列表去重,利用集合的特点
a = [11,12,13,14,15,11,13]
b = set(a)
a = list(b)
print(a)
16,列表平方,并取出大于10的值 map(fan,list)
list = [1,2,3,4,5]
def fn(x):
return x**2
res = map(fn,list)
res = [i for i in res if i>10]
print(res)
17,随机整数、小数、0-1间小数
import random
a = random.randint(1,5) #1-5区间内的随机整数,产生一个
b = random.random() #0-1间的随机小数,产生一个
c = np.random.randn(2) #返回2个标准正太分布数值,理论上是(负无穷,正无穷)。实际上是在数值0附近徘徊
print(a,b,c)
18,字典根据键从小到大排序
dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
print(dict.items()) #dict_items([('name', 'zs'), ('age', 18), ...
list = sorted(dict.items(),key=lambda i:i[0],reverse=False) #i[0]是键,i[1]是值
print('sorted根据字典键排序',list) #返回的是列表
new_dict = {} #改成字典类型
for i in list:
new_dict[i[0]]=i[1]
print(new_dict)
19,统计字符串中每个单词出现的次数
from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res) #Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, ..
20,字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"?
import re
a = 'not 404 found 张三 99 深圳'
list = a.split(' ') #用空格进行分割
print(list)
res = re.findall('\d+|[a-zA-Z]+',a) #res是a中数子或者字符部分
#加上匹配小数:res1 = re.findall('\d+\.?\d*|[a-zA-Z]+',a)
for i in res:
if i in list:
list.remove(i)
new_str = ' '.join(list)
print(res)
print(new_str)
21,求出列表所有奇数并构造新列表a = [1,2,3,4,5,6,7,8,9,10]
a = [1,2,3,4,5,6,7,8,9,10]
def fn(a):
return a%2 == 1
newa = filter(fn,a)
print(newa) #没有输出
newa = [i for i in newa] #改为列表形式
print(newa)
22,列表推导式求列表所有奇数
a = [1,2,3,4,5,6,7,8,9,10]
res = [i for i in a if i%2 ==1]
print(res)
23,合并两个列表
list1 = [1,2,3,7]
list2 = [2,3,4,6]
list1.extend(list2) #把list2添加到list1上
print(list1)
24,删除文件
python: os.remove(文件名)
linux : rm 文件名
25,日期
import datetime
a = str(datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S'))+' 星期:'+str(datetime.datetime.now().isoweekday())
print(a)
#datetime.datetime.now()获得当前时间
#.isoweekday()返回星期几
26,提高python运行效率的方法
1,使用生成器,因为可以节约大量内存
2,循环代码优化,避免过多重复代码的执行
3,核心模块用Cython PyPy等,提高效率
4,多进程,多线程,协程
5,多个if elif条件判断,可以把最有可能先发生的条件放在前面写,这样可以减少程序判断的次数