Python3使用积累

数据分析 专栏收录该内容
10 篇文章 0 订阅

Python3使用积累

最近可能要经常使用Python,所以记录一下Python的相关用法。

算法竞赛中的积累

  1. 头写法
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(' '))

4.读取一个数n
n = int(input())

5.读取一个二维数组,例如:
321 2
3 4
5 6
arr = [list(map(int, input().split(' '))) for i in range(3)]

  1. 输出
1.输出一维数组的值
print(' '.join(map(str, arr)))

2.输出float,保留小数点后6,
冒号后接整数表述输出宽度,点后面加6表示保留小数点后6print('{:.6f}'.format(n))
  1. 字符串
1.判断某个字符串前缀,例如"I love you"中的单词,
是否有"yo"这个前缀,有则输出下标(3),否则输出-1
for i, s enumerate(str.split()):
    if (s.startswith("yo")) return i + 1
return -1
  1. 其他技巧
1.交换数组第i位和第j位的值
arr[i], arr[j] = arr[j], arr[i]

2.三目运算符
st = 1 if n < 0 else 0

3.函数中使用全局变量,记得声明 global,避免混淆

4.注意在python中and&代表不同的含义
and代表逻辑运算符
&代表位运算符
  1. 数组
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) 排序

数据科学中的使用

  1. 字典
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)
  1. 函数
1.任意参数
    def func(*name):
        ...
  1. 元组
animals = ('souge', 'lama')
1.index索引
    animals = ('souge', 'lama')
    print(animals.index('lama')) # 1 
2.count计数
    print(animals.count('lama')) # 1
3.元组拆包
    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)
  1. 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)
  1. 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()                # 调用父类方法
  1. 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转换为dict
print(text)
  1. 常见Linux命令

1.gzip常用参数:

-d或--decompress或--uncompress:解压文件;
-r或--recursive:递归压缩指定文件夹下的文件(该文件夹下的所有文件被压缩成单独的.gz文件);
-v或--verbose:显示指令执行过程。
注:gzip命令只能压缩单个文件,而不能把一个文件夹压缩成一个文件(与打包命令的区别)。

2.tar常用参数
最常用的是将tar命令与gzip命令组合起来,直接对文件夹先打包后压缩

-c或--create:建立新的备份文件;
-x或--extract或--get:从备份文件中还原文件;
-v:显示指令执行过程;
-f或--file:指定备份文件;
-C:指定目的目录;
-z:通过gzip指令处理备份文件;
-j:通过bzip2指令处理备份文件。

3.zip常用参数

-v:显示指令执行过程;
-m:不保留原文件;
-r:递归处理。

unzip常用参数

-v:显示指令执行过程;
-d:解压到指定目录

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.txt
rm -rf /var/log/httpd

# 将文件压缩为文件 test.txt.gz,原来的文件则没有了,解压缩也一样
gzip /home/aistudio/work/test.txt
gzip -d /home/aistudio/test.gz

# tar本身是一个打包命令,用来打包或者解包后缀名为.tar。配合参数可同时实现打包和压缩。
tar -zcvf /home/aistudio/work/test.tar.gz /home/aistudio/work/test.txt
tar -zxvf /home/aistudio/work/test.tar.gz
tar -xvf MobileNetV2_pretrained.tar 

# zip,unzip
zip -r /home/aistudio/work/test.zip /home/aistudio/work/test.txt
unzip  /home/aistudio/work/test.zip 
  1. OS常用命令
# 列出某个文件夹下所有的文件
os.listdir(dir) 
# 文件路径拼接
os.path.join(root, item)
# 判断某个文件是否是文件夹
os.path.isdir(path)

Numpy

import numpy as np
创建

通常,数组的元素最初是未知的,但它的大小是已知的。因此,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)

还可以输出数组的一些信息,如维度、形状、元素个数、元素类型等

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) # int64

array1 = np.arange(6).reshape([2,3])
计算

矩阵乘法

#矩阵乘法
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))

矩阵的其他计算

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()) # 压成一维数组

Pandas

在这里插入图片描述

Series

Series其实就类似于C++的unordered_map,键值对的形式,用列的形式来看,其实就相当于一个数据集的属性,index代表数据的编号,value代表该属性(例如年龄等)。区别是Series允许key重复,但是unordered_map不行。

Series中最重要的一个功能是:它会在算术运算中自动对齐不同索引的数据

Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。

import numpy as np
import 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)

在这里插入图片描述

DataFrame

在这里插入图片描述
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)

在这里插入图片描述

#如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])
print(frame1)

跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
print(frame2)

在这里插入图片描述

PIL库

PIL库是一个具有强大图像处理能力的第三方库。

图像的组成:由RGB三原色组成,RGB图像中,一种彩色由R、G、B三原色按照比例混合而成。0-255区分不同亮度的颜色。

图像的数组表示:图像是一个由像素组成的矩阵,每个元素是一个RGB值

Image 是 PIL 库中代表一个图像的类(对象)

from PIL import Image
import matplotlib.pyplot as plt
#显示matplotlib生成的图形
%matplotlib inline

#读取图片
img = Image.open('/home/aistudio/work/mingren.jpg') 

plt.imshow(img)  
plt.show(img)   

#获得图像的模式
img_mode = img.mode
print(img_mode)

width,height = img.size
print(width,height)

在这里插入图片描述
图片旋转

from PIL import Image
import 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)   

在这里插入图片描述
图片剪切

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)   

在这里插入图片描述
图片缩放

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)   

在这里插入图片描述
镜像效果:左右旋转、上下旋转

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)  

在这里插入图片描述

Matplotlib

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()

在这里插入图片描述
绘制两条折线到一张图中

import matplotlib.pyplot as plt
import 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()

在这里插入图片描述
折现图注释

import matplotlib.pyplot as plt
import 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()

在这里插入图片描述
散点图

# 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()

在这里插入图片描述
柱状图

x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')
plt.show()

在这里插入图片描述
显示柱状图数值

x = np.arange(10)
y = 2**x+10
plt.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()

在这里插入图片描述

测试题

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))
  • 12
    点赞
  • 5
    评论
  • 51
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值