Python3使用积累
最近可能要经常使用Python,所以记录一下Python的相关用法。
算法竞赛中的积累
- 头写法
if __name__ == '__main__':1
- 初始化\输入
1.读取一维数组
arr = list(map(int, input().split(' ')))2.初始化全0的二维数组
st = [[0 for col in range(n)] for row in range(m)]3.读入n,m
n, m = map(int, input().split(' '))12345678
- 输出
1.输出一维数组的值print(' '.join(map(str, arr)))2.输出float,保留小数点后6位,冒号后接整数表述输出宽度,点后面加6表示保留小数点后6位print('{:.6f}'.format(n))123456
- 字符串
1.判断某个字符串前缀,例如"I love you"中的单词,
是否有"yo"这个前缀,有则输出下标(3),否则输出-1for i, s enumerate(str.split()):
if (s.startswith("yo")) return i + 1return -112345
- 其他技巧
1.交换数组第i位和第j位的值
arr[i], arr[j] = arr[j], arr[i]2.三目运算符
st = 1 if n < 0 else 03.函数中使用全局变量,记得声明 global,避免混淆1234567
- 数组
1.数组常用方法 len(list) 返回数组长度 max(list) 返回数组最大的数 list.append(obj) 向数组插入一个对象 list.count(obj) 统计数组某个对象的个数 list.index(obj) 返回某个对象的索引 list.inser(index, obj) 在某个位置插入对象 list.pop(index=-1) 弹出某个index下标的数,默认最后一个元素,并返回该值 list.remove(obj) 移除列表中某个对象的第一个匹配项 list.reverse() 翻转 list.sort(key=None, reverse=False) 排序1234567891011
数据科学中的使用
- 字典
1.增:update可以批量添加
dic.update({'name': 'zouyuhang', 'sex': 'man'})2.删:del,pop del dic['sex']
dic.pop('sex')3.查:get, 当查询的key不存在的时候,返回默认值
dic.get('sex', 0)4.改:
dic['name'] = 'tom'5.遍历 for key, value in dic.items():
print(key, value)123456789101112
- 函数
1.任意参数 def func(*name):
...123
- 元组
animals = ('souge', 'lama')1.index索引
animals = ('souge', 'lama')
print(animals.index('lama')) # 1 2.count计数 print(animals.count('lama')) # 13.元组拆包
x, y = (7, 10);
a, b, *c = (1, 2, 3, 4, 5)
print("Value of x is {}, the value of y is {}.".format(x, y))4.枚举
friends = ('Steve', 'Rachel', 'Michael', 'Monica')
for index, friend in enumerate(friends):
print(index,friend)1234567891011121314
- Python随机数
# 1.random()方法即可随机生成一个[0,1)范围内的实数import random
ran = random.random()print(ran) #0.7948628379323708 # 2.预先使用 random.seed(x) 设定好种子之后,# 其中的 x 可以是任意数字,# 此时使用 random() 生成的随机数将会是同一个。print ("------- 设置种子 seed -------")random.seed(10)print ("Random number with seed 10 : ", random.random())# 3. randint()生成一个随机整数ran = random.randint(1,20)print(ran)123456789101112131415
- Python面向对象
class Person:
def __init__(self,name):
self.name = name print ('调用父类构造函数')
def eat(self):
print('调用父类方法')
class Student(Person): # 定义子类
def __init__(self):
print ('调用子类构造方法')
def study(self):
print('调用子类方法')s = Student() # 实例化子类s.study() # 调用子类的方法s.eat() # 调用父类方法123456789101112131415161718
- Python JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。 json.dumps 用于将 Python 对象编码成 JSON 字符串。 为了提高可读性,dumps方法提供了一些可选的参数。 1.sort_keys=True表示按照字典排序(a到z)输出。 2.indent参数,代表缩进的位数 3.separators参数的作用是去掉,和:后面的空格,传输过程中数据越精简越好 json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
# 1.json.dumps 用于将 Python 对象编码成 JSON 字符串。import json
data = [ { 'b' : 2, 'd' : 4, 'a' : 1, 'c' : 3, 'e' : 5 } ]json = json.dumps(data)print(json) # [{"b": 2, "d": 4, "a": 1, "c": 3, "e": 5}]import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'text = json.loads(jsonData) #将string转换为dictprint(text)12345678910
- 常见Linux命令
1.gzip常用参数:
-d或--decompress或--uncompress:解压文件;
-r或--recursive:递归压缩指定文件夹下的文件(该文件夹下的所有文件被压缩成单独的.gz文件);
-v或--verbose:显示指令执行过程。
注:gzip命令只能压缩单个文件,而不能把一个文件夹压缩成一个文件(与打包命令的区别)。1234
2.tar常用参数
最常用的是将tar命令与gzip命令组合起来,直接对文件夹先打包后压缩
-c或--create:建立新的备份文件;
-x或--extract或--get:从备份文件中还原文件;
-v:显示指令执行过程;
-f或--file:指定备份文件;
-C:指定目的目录;
-z:通过gzip指令处理备份文件;
-j:通过bzip2指令处理备份文件。1234567
3.zip常用参数
-v:显示指令执行过程;
-m:不保留原文件;
-r:递归处理。123
unzip常用参数
-v:显示指令执行过程;
-d:解压到指定目录12
Demo:
# 展示当前目录ls /home# 显示当前路径pwd # cp :复制文件或目录cp test.txt ./test_copy.txt# mv:移动文件与目录,或修改文件与目录的名称mv /home/aistudio/work/test_copy.txt /home/aistudio/data/# rm :移除文件或目录rm /home/aistudio/data/test_copy.txtrm -rf /var/log/httpd# 将文件压缩为文件 test.txt.gz,原来的文件则没有了,解压缩也一样gzip /home/aistudio/work/test.txtgzip -d /home/aistudio/test.gz# tar本身是一个打包命令,用来打包或者解包后缀名为.tar。配合参数可同时实现打包和压缩。tar -zcvf /home/aistudio/work/test.tar.gz /home/aistudio/work/test.txttar -zxvf /home/aistudio/work/test.tar.gztar -xvf MobileNetV2_pretrained.tar
# zip,unzipzip -r /home/aistudio/work/test.zip /home/aistudio/work/test.txt
unzip /home/aistudio/work/test.zip
12345678910111213141516171819202122232425262728
- OS常用命令
# 列出某个文件夹下所有的文件os.listdir(dir) # 文件路径拼接os.path.join(root, item)# 判断某个文件是否是文件夹os.path.isdir(path)1234567
Numpy
import numpy as np1
创建
http://zzdxb.baikezh.com/
通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了几个函数来创建具有初始占位符内容的数组。
zeros():可以创建指定长度或者形状的全0数组
ones():可以创建指定长度或者形状的全1数组
empty():创建一个数组,其初始内容是随机的,取决于内存的状态
为了创建数字组成的数组,NumPy提供了一个类似于range的函数,该函数返回数组而不是列表。
#将列表转换为数组array = np.array([[1,2,3],
[4,5,6]])print(array)# 生成全0或者全1的数组zeros_data = np.zeros((2, 3)).astype("int32")ones_data = np.ones((3, 3), dtype='int64')emptyarray = np.empty((3,4))arr = np.arange(0, 10)12345678910
还可以输出数组的一些信息,如维度、形状、元素个数、元素类型等
array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])print(array)#数组维度print(array.ndim) # 2#数组形状print(array.shape) # (4, 3)#数组元素个数print(array.size) # 12#数组元素类型print(array.dtype) # int64array1 = np.arange(6).reshape([2,3])123456789101112
计算
矩阵乘法
#矩阵乘法arr3 = np.array([[1,2,3],[4,5,6]])arr4 = np.ones([3,2],dtype=np.int64)print(arr3)print(arr4)print(np.dot(arr3,arr4))123456
矩阵的其他计算
arr = np.eye(2, 3, dtype=np.int64)print(arr)print(np.sum(arr, axis=0)) # 按列求和print(np.max(arr, axis=1)) # 按行求和print(np.argmax(arr, axis=1)) # 按行求最大值对应的索引arr3_tran = arr3.transpose() # 转置print(arr3_tran)print(arr3.flatten()) # 压成一维数组12345678910
Pandas

Series
Series其实就类似于C++的unordered_map,键值对的形式,用列的形式来看,其实就相当于一个数据集的属性,index代表数据的编号,value代表该属性(例如年龄等)。区别是Series允许key重复,但是unordered_map不行。
Series中最重要的一个功能是:它会在算术运算中自动对齐不同索引的数据
Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。
import numpy as npimport pandas as pd
s = pd.Series(['a', 'b', 'c'])print(s)#与字典不同的是:Series允许索引重复s = pd.Series(['a','b','c','d','e'],index=[100,200,100,400,500])print(s)# Series 可以用字典实例化d = {'b': 1, 'a': 0, 'c': 2}pd.Series(d)# 可以通过Series的values和index属性获取其数组表示形式和索引对象print(s.values)print(s.index)# Series进行运算时,对应index的位置会进行计算a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])b = pd.Series([3, 2, 1], index=['c', 'b', 'a'])print(a + b)print(a * b)1234567891011121314151617181920212223

DataFrame
http://dxb.myzx.cn/oldage/
DataFrame就相当于平常的数据集的样式,第一列是对应数据的编号(索引),之后的列相当于数据的每个属性。
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
DataFrame生成
用多维数组字典、列表字典生成 DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}frame = pd.DataFrame(data)print(frame)123

#如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])print(frame1)123
跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])print(frame2)12

PIL库
http://ask.baikezh.com/hunan/
PIL库是一个具有强大图像处理能力的第三方库。
图像的组成:由RGB三原色组成,RGB图像中,一种彩色由R、G、B三原色按照比例混合而成。0-255区分不同亮度的颜色。
图像的数组表示:图像是一个由像素组成的矩阵,每个元素是一个RGB值
Image 是 PIL 库中代表一个图像的类(对象)
from PIL import Imageimport matplotlib.pyplot as plt#显示matplotlib生成的图形%matplotlib inline#读取图片img = Image.open('/home/aistudio/work/mingren.jpg') plt.imshow(img) plt.show(img) #获得图像的模式img_mode = img.modeprint(img_mode)width,height = img.sizeprint(width,height)1234567891011121314151617
图片旋转
from PIL import Imageimport matplotlib.pyplot as plt#显示matplotlib生成的图形%matplotlib inline#读取图片img = Image.open('/home/aistudio/work/mingren.jpg') #显示图片plt.imshow(img) plt.show(img) #将图片旋转45度img_rotate = img.rotate(45) #显示旋转后的图片plt.imshow(img_rotate) plt.show(img_rotate) 12345678910111213141516
图片剪切
from PIL import Image#打开图片img1 = Image.open('/home/aistudio/work/mingren.jpg') #剪切 crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)img1_crop_result = img1.crop((126,0,381,249))#保存图片img1_crop_result.save('/home/aistudio/work/mingren_result.jpg')#展示图片plt.imshow(img1_crop_result) plt.show(img1_crop_result) 123456789101112131415
图片缩放
from PIL import Image#打开图片img2 = Image.open('/home/aistudio/work/mingren.jpg') width,height = img2.size#缩放img2_resize_result = img2.resize((int(width*0.6),int(height*0.6)),Image.ANTIALIAS)print(img2_resize_result.size)#保存图片img2_resize_result.save('/home/aistudio/work/yushuxin_resize_result.jpg')#展示图片plt.imshow(img2_resize_result) plt.show(img2_resize_result) 123456789101112131415161718
镜像效果:左右旋转、上下旋转
from PIL import Image#打开图片img3 = Image.open('/home/aistudio/work/yushuxin.jpg') #左右镜像img3_lr = img3.transpose(Image.FLIP_LEFT_RIGHT)#展示左右镜像图片plt.imshow(img3_lr) plt.show(img3_lr) #上下镜像img3_bt = img3.transpose(Image.FLIP_TOP_BOTTOM)#展示上下镜像图片plt.imshow(img3_bt) plt.show(img3_bt) 123456789101112131415161718

Matplotlib
http://dxb.myzx.cn
matplotlib.pylot是绘制各类可视化图形的命令字库
绘制折线图
import matplotlib.pyplot as plt
import numpy as np
#显示matplotlib生成的图形
%matplotlib inline
x = np.linspace(-1,1,50) #等差数列
y = 2*x + 1
#传入x,y,通过plot()绘制出折线图
plt.plot(x,y)
#显示图形
plt.show()123456789101112131415
绘制两条折线到一张图中
import matplotlib.pyplot as pltimport numpy as np
plt.figure(figsize=(7,5))plt.plot(x,y1,color='red',linewidth=1)plt.plot(x,y2,color='blue',linewidth=5)plt.xlabel('x',fontsize=20)plt.ylabel('y',fontsize=20)plt.show()123456789
折现图注释
import matplotlib.pyplot as pltimport numpy as np
l1, = plt.plot(x,y1,color='red',linewidth=1)l2, = plt.plot(x,y2,color='blue',linewidth=5)plt.legend(handles=[l1,l2],labels=['aa','bb'],loc='best')plt.xlabel('x')plt.ylabel('y')# plt.xlim((0,1)) #x轴只截取一段进行显示# plt.ylim((0,1)) #y轴只截取一段进行显示plt.show()1234567891011
散点图
# dots1 = np.array([2,3,4,5,6])# dots2 = np.array([2,3,4,5,6])dots1 =np.random.rand(50)dots2 =np.random.rand(50)plt.scatter(dots1,dots2,c='red',alpha=0.5) #c表示颜色,alpha表示透明度plt.show()1234567
柱状图
x = np.arange(10)y = 2**x+10plt.bar(x,y,facecolor='#9999ff',edgecolor='white')plt.show()1234
显示柱状图数值
x = np.arange(10)y = 2**x+10plt.bar(x,y,facecolor='#9999ff',edgecolor='white')for ax,ay in zip(x,y):
plt.text(ax,ay,'%.1f' % ay,ha='center',va='bottom')plt.show()123456

测试题
http://ask.baikezh.com/chengdou/
1.查找特定名称文件
遍历”Day1-homework”目录下文件;
找到文件名包含“2020”的文件;
将文件名保存到数组result中;
按照序号、文件名分行打印输出。
注意:提交作业时要有代码执行输出结果。
#导入OS模块import os#待搜索的目录路径path = "Day1-homework"#待搜索的名称filename = "2020"#定义保存结果的数组result = []def findfiles(root, target):
#在这里写下您的查找文件代码吧!
items = os.listdir(root)
for item in items:
path = os.path.join(root, item)
if os.path.isdir(path):
findfiles(path, target)
elif path.find(target) != -1:
result.append(path)if __name__ == '__main__':
findfiles(path, filename)for idx, name in enumerate(result):
print("[{}, '{}']".format(idx+1, name))
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30239065/viewspace-2744315/
,如需转载,请注明出处,否则将追究法律责任。