【Python基础】常用数据结构及处理

news2024/11/16 11:46:20

1. KeyValue

  • dict.clear() 删除字典内所有元素
  • dict.copy()返回一个字典的浅复制
  • [dict.fromkeys(seq, val])创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
  • dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
  • dict.has_key(key)如果键在字典dict里返回true,否则返回false
  • dict.items()以列表返回可遍历的(键, 值) 元组数组
  • dict.keys() 以列表返回一个字典所有的键 注意这里面的括号
  • dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  • dict.update(dict2) 把字典dict2的键/值对更新到dict里
  • dict.values()以列表返回字典中的所有值
  • [ pop(key,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
  • popitem() 返回并删除字典中的最后一对键和值。

注意,使用append 添加一行数据时候,要使用按行或者按列追加,否则会出现错误,

data={}
for i in range(0,len(test_x)):
    if test_y[i] in data:
        data[test_y[i]]=np.row_stack((data[test_y[i]],test_x[i]))
    else:
        print("addd:",test_y[i])
        data[test_y[i]]=test_x[i]

2. 固定长度数组

class HandBase():
    def __init__(self,length):
        self.A=[]
        self.B=[]
        self.C=[]
        self.D=[]
        self.E=[]
        self.length=length
    def add(self,data):
        '''
            data=[a,b,c,d,e], 如果不是该格式,则舍弃
        '''
        if len(data)!=5:
            return
        #todo arduino 上面sleep(50ms),  选择什么参数比较合适
        if len(self.A)>self.length:
            self.A.pop(0)
            self.B.pop(0)
            self.C.pop(0)
            self.D.pop(0)
            self.E.pop(0)
        self.A.append(data[0])
        self.B.append(data[1])
        self.C.append(data[2])
        self.D.append(data[3])
        self.E.append(data[4])
        #todo 后续可以再这里面添加数据拟合算法
    def getMean(self):
        return np.mean(self.A),np.mean(self.B),np.mean(self.C),np.mean(self.D),np.mean(self.E)
    def getLength(self):
        return len(self.A)
    def saveData(self,filename):
        strflex=",".join([str(i) for i in self.A])+"\n"+",".join([str(i) for i in self.B])+"\n"+",".join([str(i) for i in self.C])+"\n"+",".join([str(i) for i in self.D])+"\n"+",".join([str(i) for i in self.E])
        #todo 存储到文件中,还是数据库中? 存储到文件中已经完成,是否需要存储到数据库中
        with open(filename, 'w') as f:
            f.write(strflex)
        print("saveData Ok",filename)
        
    def clear(self):
        self.A.clear()
        self.B.clear()
        self.C.clear()
        self.D.clear()
        self.E.clear()

3. 行列操作

3.1. 逆序遍历

a = [1,3,6,8,9]
print("通过下标逆序遍历1:")
for i in a[::-1]:
    print(i, end=" ")
print("\n通过下标逆序遍历2:")
for i in range(len(a)-1,-1,-1):
    print(a[i], end=" ")
print("\n通过reversed逆序遍历:")
for i in reversed(a):
    print(i, end=" ")

3.2. 行列拼接

#方法一
#	该方法只能将两个矩阵合并
#	注意要合并的两矩阵的行列关系
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[0,0,0]])
c = np.r_[a,b]     # 按行拼接,添加在行尾部
d = np.c_[a,b.T]   # 按列拼接,添加在列尾部

#方法二:
#	 将一个集合插入到一个矩阵中,对于b可以是列表或元组,它仅仅提供要插入的值,但个数要对
#	 np.insert的第二个参数是插入的位置从0开始,axis用来控制是插入行还是列!
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[0,0,0]])
c = np.insert(a, 0, values=b, axis=0)   #axis=0 代表 按行插入,使其成为一行
d = np.insert(a, 0, values=b, axis=1)   #axis=1 代表 按列插入,使其成为一列

#方法三
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[0,0,0]])
c = np.row_stack((a,b))      # 按行拼接,添加在行尾部, 注意俩个元素用括号括起来了
d = np.column_stack((a,b.T)) # 按列拼接,添加在列尾部
.1. concatenate

0轴的数组对象进行纵向的拼接(纵向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1

Join a sequence of arrays along an existing axis.
Parameters
a1, a2, ... : sequence of array_like
    The arrays must have the same shape, except in the dimension
    corresponding to `axis` (the first, by default).
axis : int, optional
    The axis along which the arrays will be joined.  Default is 0.

Returns
res : ndarray
    The concatenated array.
See Also
    --------
    ma.concatenate : Concatenate function that preserves input masks.
    array_split : Split an array into multiple sub-arrays of equal or
                  near-equal size.
    split : Split array into a list of multiple sub-arrays of equal size.
    hsplit : Split array into multiple sub-arrays horizontally (column wise)
    vsplit : Split array into multiple sub-arrays vertically (row wise)
    dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).
    stack : Stack a sequence of arrays along a new axis.
    hstack : Stack arrays in sequence horizontally (column wise)
    vstack : Stack arrays in sequence vertically (row wise)
    dstack : Stack arrays in sequence depth wise (along third dimension)

image-20210621112500264

3.3. 数组转置

np.transpose(arr)

3.4. 维度

array.shape返回数组的行数和列数; array.size返回数组的元素个数array.dtype返回数组里元素的数据类型

  • x.shape[:3]表示返回(3, 2, 3),分别表示三维数组中二维数组的个数、单个二维数组的行数、单个二维数组的列数。
  • #转化为一维numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵;
  • numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。
  • reshape
# 转化一行
z.reshape(1,-1)
# 转化一列
z.reshape(-1,1)
# 转化x行y列
z.reshape(x,y)  
  • numpy 初始化
# numpy 创建方式一
list = [1 , 2 , 3 , 4] 
array_1 = np.array(list_1)
# numpy 创建方式二
array_4 = np.arange(1 ,10)

3.5. 切片

# 首先看数组维度
c[:2,1:] # 对于二维数组,“:2”表示行:即从第0行开始到第2行(不包括第2行)结束的行的元素,“1:”表示从第1列到后面几列的元素。

4. 打乱数据

np.random.shuffle(x):在原数组上进行,改变自身序列,无返回值

np.random.permutation(x):不在原数组上进行,返回新的数组,不改变自身数组

  • 都是按行进行打乱,如果只有一行则按列进行打乱;

5. 数据维度

einops主要是rearrange, reduce, repeat这3个方法,下面介绍如何通过这3个方法如何来起到 stacking, reshape, transposition, squeeze/unsqueeze, repeat, tile, concatenate, view 以及各种reduction操作的效果)

#pip install einops
y = x.transpose(0, 2, 3, 1)
y = rearrange(x, 'b c h w -> b h w c')

rearrange(ims[0], 'h w c -> w h c')

# length of newly composed axis is a product of components
# [6, 96, 96, 3] -> [96, (6 * 96), 3]
rearrange(ims, 'b h w c -> h (b w) c').shape

# let's flatten 4d array into 1d, resulting array has as many elements as the original
rearrange(ims, 'b h w c -> (b h w c)').shape

6. numpy 高维数据计算

# a.shape  (2,3,2,3)
a = np.array([[[[1, 1, 1], [1, 1, 1]],[[2, 2, 2], [2, 2, 2]], [[3, 3, 3], [3, 3, 3]]][[[4, 4, 4], [4, 4, 4]],[[6, 6, 6], [6, 6, 6]], [[8, 8, 8], [8, 8, 8]]]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

prompt模型详解之文本生成

prompt在生成方面的应用从两个方面进行介绍: 评估手段 具体任务 评估手段 生成任务的评估手段主要分为四种类型: 1). 基于N-gram匹配 2). 基于编辑距离 3). 基于词向量 4). 基于可学习方式。 本小节主要介绍BARTSCORE,其使用prompt方…

Python杂题

目录 一、前言 二、例题1——修剪灌木 三、例题2—— 付账问题 四、例题3——最少砝码 五、例题四——矩形拼接 六、例题五——蜂巢 一、前言 竞赛题有很多不需要什么算法的题目,只要学过编程语言就能做,其考核思维、逻辑、编码能力。而这种题有“…

【算法题解】 8. K 个一组翻转链表

文章目录题目解题思路代码实现复杂度分析题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持…

Python中编码(encode)解码(decode)讲解

嗨害大家好鸭!我是小熊猫~ 这次也是给大家带来一点干货~ 所用素材:点击此处跳转文末名片获取 一、python3中str与unicode 在python3中,字符串有两种形式:str和bytes,两者区别如下: unicode string(str类型)&#xf…

【经验】关于区分cin、getline、cin.getline三种字符串输入的区别

cin 既可以输入char[]数组&#xff0c;也可以输入string类型&#xff0c;输入会被空格打断 cin对char进行输入 #include<bits/stdc.h> using namespace std; int main(){char ch[50];cin>>ch;cout<<strlen(ch)<<endl;for(int i0;i<strlen(ch);i){…

1.移动机器人发展现状

移动机器人主要应用场景&#xff1a; 场景1.仓储机器人(AGV自动导引运输车)&#xff1a;电商企业用户下单后机器人可以实现自动分拣和发货。需要多个传感器配合 2.自动驾驶领域(AMR自主移动机器人):车辆避让行人、导航等 热点研究领域&#xff1a; 环境感知和建模、人机交互…

2022简要总结和2023行动指南

在这辞旧迎接之际&#xff0c;心存感恩&#xff0c;放眼未来。 祝宝妈妈宝&#xff0c;幸福快乐&#xff1b; 祝国泰民安&#xff0c;政通人和。 祝百融云创系&#xff0c;生意兴隆&#xff1b; 祝公司老板们&#xff0c;大展宏图&#xff1b; 祝同事同行er&#xff0c;身…

Java算法_LeetCode:旋转数组

旋转数组 给你一个数组&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,…

Fastsapi的小疑问

1. Fastapi中的get和post区别是什么&#xff1f; 答&#xff1a;get参数传输暴露在外&#xff0c;post隐式传输 GET参数获取&#xff1a;获取一个URL后面带?param11&param22这种形式。 特点&#xff1a;URL上直接编辑传输&#xff0c;方便快捷&#xff0c;但是信息暴露在…

【nowcoder】笔试强训Day16

目录 一、选择题 二、编程题 2.1扑克牌大小 2.2完全数计算 一、选择题 1.在关系型是数据库中&#xff0c;有两个不同的事务同时操作数据库中同一表的同一行&#xff0c;不会引起冲突的是&#xff1a; A. 其中一个DELETE操作&#xff0c;一个是SELECT操作 B. 其中两个都是…

植物大战僵尸:代码实现无限阳光

通过逆向分析植物阳光数量的动态地址找到阳光的基址与偏移&#xff0c;从而实现每次启动游戏都能够使用基址加偏移的方式定位阳光数据&#xff0c;最后我们将通过使用C语言编写通用辅助实现简单的无限阳光辅助&#xff0c;在教程开始之前我们先来说一下为什么会有动态地址与基址…

光缆单盘检测与光缆线路测试需使用双窗口吗?

1 引言 光缆线路和宽带接入工程中&#xff0c;通常会涉及光缆单盘检测与光缆线路的测试工作&#xff0c;光缆线路测试包括&#xff1a;中继段测试、用户光缆测试等。这些测试条目&#xff0c;有的只需采用测试仪表的1个波长进行测试&#xff0c;即单窗口测试&#xff0c;有的则…

代码随想录算法训练营第2天 977. 有序数组的平方、209. 长度最小的子数组

代码随想录算法训练营第2天| 977. 有序数组的平方、209. 长度最小的子数组 有序数组的平方 力扣题目链接(opens new window) 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 数组其实是有…

C 语法--编译相关

1&#xff0c; 单下划线和双下划线 #pragma #pragma 用于指示编译器完成一些特定的动作。#pragma 所定义的很多指示字是编译器特有的&#xff0c;在不同的编译器间是不可移植的 #pragma section APP_VERSION //__far const unsigned long version 0x01010101; __far const un…

redis缓存淘汰策略-基于LinkedHashMap实现LRU算法

redis缓存淘汰策略-LRU算法&#xff08;最近最少使用&#xff09; LRU是Least Recently Used的缩写&#xff0c;即最近最少使用&#xff0c;是一种常用的页面置换算法&#xff0c; 选择最近最久未使用的数据予以淘汰。 1&#xff0c;所谓缓存&#xff0c; 必须要有读写两个操作…

【叨叨与总结】2022年总结

如果我记得没错&#xff0c;这个记录时间的软件应该是在6月份或者7月份才开始用的&#xff0c;大概记录的时间有半年。个人觉得还是不错的&#xff0c;下面还是简单的总结一下。   首先睡眠时长是有一定保障的&#xff0c;甚至有好多时候还睡了9、10个小时&#xff0c;当然这…

【Python基础】模块化编程-包调用

datitle: Python Module&&Invoking date: 2020-05-12 00:16:58 img: https://gitee.com/github-25970295/blogImage/raw/master/img/woman-3219507__340.webp categories: 编程语言 reprintPolicy: cc_by cover: false tags: python ​ 无论我们选择用何种语言进行程序…

2022年度总结:凝神聚力 踔厉奋发

2021年底手里握了几份offer&#xff0c;有研究型大学&#xff0c;也有教学型大学。是选择去前者继续拼搏&#xff0c;还是选择去后者直接躺平&#xff1f;二者的权衡和取舍确实不太容易抉择。尽管也咨询了很多前辈&#xff0c;最后还是得自己做决定。尽管我还是很喜欢做研究工作…

spark理论

前言&#xff1a; 本文是之前19年学生时学习林子雨老师《Spark大数据 》网易公开课的中关于spark的理论部分的部分笔记。主要包括大数据产品与spark的一些概念与运行原理介绍。 目录 大数据产品与hadoop生态系统 Spark概念 MapReduce与spark的比较 Spark运行 Spark运行基本流程…

【Spring 系列】Spring Session 深度解析

文章目录Spring Session 架构及应用场景为什么要spring-sessionSR340规范与spring-session的透明继承Spring Session探索特点核心 APIservlet session 与 spring-session 关系webflux 与 spring session 的关系基于 Servlet 的 Spring Session 实现思考题背景1、注册到 Filter …