序列
列表
list0=[1,'2',True,3]
list0.append(4)
print(list0[3])
print(list0[1:3])
元组
tuple0=(1,2,3,4,5)
print(type(tuple0))
print(tuple0[1:3])
#tuple0[1]=10
print(tuple0)
字典
dict0={'name':'张三','age':18}
print(dict0['name'])
dict0['name']='李四'
print(dict0['name'])
dict1={'1':'张三','1':'李四'}
print(dict1['1'])#如果键重复,则后面的值会覆盖前面的值
集合
set0={1,2,3,4,1,5}
print(type(set0))
print(set0)#集合中的元素是无序的,且不能重复
各种结构
条件语句
a=2
if a>1:
print('a>1')
elif a==1:
print('a=1')
else:
print('a<1')
循环结构
num=0
while num<5:
print(num)
num+=1
if num==3:
print('num=3')
break
函数
#打印菱形
for i in range(5):
print(' '*(5-i-1)+'*'*(2*i+1))
for i in range(4):
print(' '*(i+1)+'*'*(7-2*i))
文件
#打开文件
file=open('test.txt','r',encoding="utf-8")
#读取文件
context=file.readlines()
print(context)
#关闭文件
file.close()
#写入文件
file=open('test.txt','w',encoding="utf-8")
file.write('hello,world')
file.close()
模块安装与导入
#pip
pip --version #查看pip版本
pip install some-package-name #安装包
pip uninstall some-package-name #卸载包
pip list #查看已安装的包
#conda
conda install some-package-name #安装包
conda uninstall some-package-name #卸载包
conda list #查看已安装的包
数值计算numpy
import numpy as np
#1.数组的创建
arr=np.array([1,2,3,4,5])
print(arr)
print(type(arr))
arr1=np.array([[1,2,3,4,5],[1,2,3,4,5]])
print(arr1)
print(type(arr1))
print(arr1.shape)#查看数组的维度
#2.索引和切片
print(arr[0])
print(arr[0:3])
print(arr1[1][2])
#3.数组的运算 +-*/对应位置的元素相加减乘除
arr2=np.array([1,2,3,4,5])
print(arr+arr2)
print(arr*arr2)
#4.数组的形状
arr3=np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
print(arr3.shape)
new_array=arr3.reshape(2,6)
print(new_array,"新数组的形状是",new_array.shape)
new_arr_T=new_array.transpose()
print(new_arr_T,"新数组的转置是",new_arr_T.shape)
#5.线性代数/统计
arr4=np.array([1,2,3])
arr5=np.array([4,5,6])
arr4_dot_arr5=np.dot(arr4,arr5)
print(arr4_dot_arr5)
arr=np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
print("数组的平均值",arr.mean())
print("数组的最大值",np.max(arr))
print("数组的最小值",np.min(arr))
print("数组的和",np.sum(arr))
print("数组的标准差",np.std(arr))
print("数组的排序",np.sort(arr))#不能用arr.sort()
print(arr[arr>5]) #数组中大于5的元素
#6.保存和导入
np.save('arr',arr)
arr=np.load('arr.npy')
print(arr)
课后练习:创建4*4随机数组,只保留10以内的数,并计算出所有元素的和
import numpy as np np.random.seed(12344) #设置随机种子,保证每次运行结果相同 print(np.random.rand()) #生成0到1之间的随机数 arr=np.random.randint(0,100,16).reshape(4,4) #生成0到100之间的16个随机数,并reshape成4*4的数组 print(arr[arr<=10]) print("数组的和",np.sum(arr[arr<=10]))
表格处理pandas
import pandas as pd
df = pd.read_excel("天气数据2024.xlsx", sheet_name="天气记录", engine="openpyxl")
print(df.head(10))
print(type(df))
data={'日期':['2024-01-01','2024-01-02','2024-01-03'],'天气':['晴','多云','阴']}
datadf=pd.DataFrame(data)
print(datadf)
#基础信息
print(df.head()) #查看数据前几行
print(df.info()) #查看数据类型
#缺失值处理
print(df.head(10))
df=df.dropna()
print(df.head(10))
df['温度(℃)']=df['温度(℃)'].astype(int) #将温度列转换为整数类型
print(df.info())
#选择和过滤
df_1=df[df['温度(℃)']>20]
print(df_1.head())
print(df_1.info())
print(df['风速(m/s)'].std())
lb=df['风速(m/s)'].mean()-3*df['风速(m/s)'].std()
ub=df['风速(m/s)'].mean()+3*df['风速(m/s)'].std()
print(df[(df['风速(m/s)']>=lb)&(df['风速(m/s)']<=ub)])
课后练习:自己创建一个dataframe, 姓名 身高 体重 成绩 ,输出成绩第一名和平均分,以及低于60分的同学名字
import pandas as pd import numpy as np data={'姓名':['张三','李四','王五','赵六','孙七'], '身高':[170 for i in range(5)], '体重':[60,55,70,58,65], '成绩':list(np.random.randint(30,90,5))} df=pd.DataFrame(data) print(df) print(df[df['成绩']==df['成绩'].max()]) print('平均分:',np.mean(df['成绩'])) newdf=df[df['成绩']<60] print('低于60分的同学:',newdf['姓名'])
可视化Matplotlib
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,10) #生成0到10之间的10个数
print(x)
y=np.sin(x) #生成x的正弦值
plt.plot(x,y,linestyle='--',label='zhexian') #绘制x和y的图像
plt.title('y = sin(x)') #设置标题
plt.xlabel('x') #设置x轴标签
plt.ylabel('y') #设置y轴标签
plt.scatter(x,y,marker='*',c='r',label='sandian') #绘制散点图
plt.legend() #显示图例
plt.show() #显示图像
fig,axes=plt.subplots(1,2) #创建一个1行2列的图像
axes[0].scatter(x,y,marker='*',c='r',label='sandian')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[0].set_title('shujudian')
axes[1].plot(x,y,linestyle='--',label='zhexian')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].set_title('nihejieguo')
fig.legend()
fig.show()
练习
使用二分法解超越方程 e^x=pi的解
import numpy as np def f(x): return np.e**x-np.pi res=1e-6 def binary_search(a,b): while b-a>res: mid=(a+b)/2 if f(mid)>0: b=mid else: a=mid print('方程的根为:',np.log(np.pi)) print('二分法找到的解',mid) binary_search(0,10)
方程的根为: 1.1447298858494002
二分法找到的解 1.1447304487228394