python包和模块day13

1.Python JSON 数据解析

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。Python提供了内置的JSON模块,用于处理JSON数据。

#json;在python中格式和字典的格式基本一样,不同的是json数据的key只能是字符串类型
#定义json和定义字典方法形同
#json的键必须使用双引号
js = {"name":"zhangsan","age":20}
#定义的json在python中的数据类型就是dict
print(type(js))
#字典序列化为json字符串
import json
s = json.dumps(js)
print(s)
print(type(s))

#序列化为json字符串后,该json字符串不能修改
# s["name"] = "zhangsan"
# print(s)

#json字符串反序列化为字典
dic =json.loads(s)
print(dic)
print(type(dic))
#如果需要修改json字符串的元素值,需要反序列化为字典再修改

#dump和loads做序列化操作,dump和load做文件读写操作
#对象存文件:dump(dic,file),dic是要写入的数据,file是要写入的文件
with open('data.json', 'w') as f:
    json.dump(dic, f)

字典和JSON格式不同之处

  1. 数据类型限制

    • JSON:支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuplesetbytes 等。

    • Python 字典:可以包含多种 Python 特有的数据类型,比如 tuplesetbytes 等。

  2. 格式要求

    • JSON:数据必须以字符串的形式表示,键必须是双引号括起来的字符串,值可以是字符串、数字、布尔值、数组、对象或 None

    • Python 字典:键可以是任意不可变的类型(如字符串、数字、元组),值可以是任意类型。键通常用单引号或双引号括起来,但 Python 允许在字典中使用不加引号的键。

1.Numpy基础

1.1 概念

  • NumPy 的全称是“ Numeric Python”,它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组

  • 在数组算术计算方面, NumPy 提供了大量的数学函数

  • NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算

  • NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上

1.2 优点

NumPy 可以很便捷高效地处理大量数据,使用 NumPy 做数据处理的优点如下:

  • NumPy 是 Python 科学计算基础库

  • NumPy 可以对数组进行高效的数学运算

  • NumPy 的 ndarray 对象可以用来构建多维数组

  • NumPy 能够执行傅立叶变换与重塑多维数组形状

  • NumPy 提供了线性代数,以及随机数生成的内置函数

1.3 与python列表区别

NumPy 数组是同质数据类型(homogeneous),即数组中的所有元素必须是相同的数据类型。数据类型在创建数组时指定,并且数组中的所有元素都必须是该类型。

Python 列表是异质数据类型(heterogeneous),即列表中的元素可以是不同的数据类型。列表可以包含整数、浮点数、字符串、对象等各种类型的数据。

NumPy 数组提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。

Python 列表提供了基本的列表操作,如添加、删除、切片、排序等。

1.4 安装

pip install numpy==1.26.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.ndarray

NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。

ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。

主要特点

  • 多维数组:ndarray 可以表示任意维度的数组,包括一维、二维、三维等。

  • 同质数据类型:ndarray 中的所有元素必须是相同的数据类型。

  • 高效内存布局:ndarray 在内存中是连续存储的,这使得数组的访问和操作非常高效。

  • 丰富的功能和方法:ndarray 提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。

使用方式:

  • ndarray 是通过 array 函数或其他 NumPy 函数(如 zeros、ones、arange 等)创建的。

  • array 函数接受一个序列作为输入,并返回一个 ndarray 对象。

# array创建数组:
# 参数:object,要传入序列,可以是一维多维数组
#  dtype :数组元素的数据类型,如果未指定dtype,numpy自动根据输入判断数据类型
#  order :按照那种存储方式存数据,c——按照行存,F按照列存
#ndmin:指定数组维度,在整个数组外面加一个维度,不能修改形状

import numpy as np
a = np.array([1,2,3,4,5], dtype=np.int32, order='C', ndmin=2)
print(a)
print(type(a))
print(a.dtype)

#创建二维数组
a = np.array([[1,2,3],[4,5,6]])
print(a)
print(a.dtype)
# 描述ndarray数组形状,数据类型:元组,(n ,m)形状表示n行,m列
print(a.shape)

#zeros:根据指定的shape创建数组,数组元素默认以0填充
a = np.zeros((2,3))
print(a)

#ones:根据指定形状创建数组,数组元素默认1填充
a = np.ones((3,2))
print(a)

#full:根据形状创建数组,以value填充元素值
a = np.full((3,2), 5)
print(a)

# arange():(start,stop,step):创建一个等差数列的一维数组
#start:起始值 ; stop:终止值;step步长
a = np.arange(1, 10, 2)
print(a)
a = np.arange(1, 10, 1)
print(a)
a = np.arange(10, 0, -1)
print(a)

#linspace():创建一个等差数列的一维数组,根据份数创建
#start:起始值;stop:终止值默认包含,由endpoint参数控制,该参数默认True
#num;把序列分成多少份,默认份数为50
#endpoint:为True表示包含终止值,为False表示不包含终止值,默认为True
a = np.linspace(0,10 ,10)
print(a)

      练习

编写一个程序,打开文本文件,计算其中的大写字母数量。

def num_A():
    num = 0
#自己创建一个文本文件,最好在你编写程序的同一路径下,不然绝对路径查找很烦,不懂半天找不到
    f = open(r'Numpy语法\大写字母的数量.txt','r',encoding='utf-8') 
#encoding记得改成utf—8不然汉字是乱码
    text = f.read()            
    for i in text:
        if i.isupper():        #判断字符大写的函数 
            num += 1 
    f.close()                  #记得关文件
    print(num)
num_A()

练习2

在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:

北方向 是y轴的正方向。
南方向 是y轴的负方向。
东方向 是x轴的正方向。
西方向 是x轴的负方向。
机器人可以接受下列三条指令之一:

"G":直走 1 个单位
"L":左转 90 度
"R":右转 90 度
机器人按顺序执行指令 instructions,并一直重复它们。

只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false。

提示1.联合数学所学的平面知识判断向量,和机器人的位置。

提示2.结束指令后,只有方向改变即机器人不面向北,或者,仍处于原点,即位移为0,此时机器人会被困于环之内,否则逃离。

示例 1:

输入:instructions = "GGLLGG"
输出:true
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“G”:移动一步。位置:(0,2).方向:北。
“L”:逆时针旋转90度。位置:(0,2).方向:西。
“L”:逆时针旋转90度。位置:(0,2)方向:南。
“G”:移动一步。位置:(0,1)方向:南。
“G”:移动一步。位置:(0,0)方向:南。
重复指令,机器人进入循环:(0,0)——>(0,1)——>(0,2)——>(0,1)——>(0,0)。
在此基础上,我们返回true。

class Solution:
    def isRobotBounded(self, instructions: str) -> bool:
        direction = 0                   #方向
        x,y = 0, 0                      #位置
        for i in instructions:
            if i == 'G':
                if direction == 0:
                    y += 1
                elif direction == 90 or direction == -270:      #位置判断
                    x += 1
                elif direction ==180 or direction == -180:
                    y -= 1
                elif direction == 270 or direction == -90:
                    x -= 1
            elif i == 'L':
                direction -= 90
                if direction == -360:                          #向量判断
                    direction = 0
            elif i == 'R':
                direction += 90
                if direction == 360:
                    direction = 0
        if direction != 0 or (x == 0 and y == 0):
            return True                                         #根据位置结果判断
        else:
            return False

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值