精华内容
下载资源
问答
  • Python-结构体数组

    2020-11-13 15:35:00
    结构体数组

    文章目录

    前言

    在生成结构数组前先创建一个class类的结构体,再定义一个列表lis来作为结构体数组,
    然后使用append方法将对应的类添加进去作为其元素
    添加结束后就可以使用[列表名][索引].成员属性来访问结构体数组指定结构体指定属性了。

    相关介绍

    python实现结构体数组(初始化并赋值)

    Python笔记-自定义结构体

    代码

    在这里插入图片描述

    class student: #结构体
        def __init__(self):
            self.name = ''
            self.number = 0
    lis = [] #结构体数组
    lis.append(student()) #添加一个结构体
    lis.append(student()) #添加第二个结构体
    
    #访问结构体数组中,第一个结构体
    lis[0].name = 'fox1'
    lis[0].number = 11
    print(lis[0].name,lis[0].number)
    #访问结构体数组中,第二个结构体
    lis[1].name = 'fox2'
    lis[1].number = 22
    print(lis[1].name,lis[1].number)
    
    
    展开全文
  • python实现结构体数组(初始化并赋值)

    万次阅读 热门讨论 2018-10-13 16:27:40
    C语言中结构体数组概念及定义 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?... 定义结构体数组的方法...

        C语言中结构体数组概念及定义    

           一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?
           很明显不可能,这时就要使用数组结构体中也有数组,称为结构体数组。结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。
           定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。C语言中结构体数组定义很简单,比如:

    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };                   //定义STU结构体
    
    struct STU stu[10];  //包含10个STU结构体类型的结构体数组

       或者:

    typedef struct
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }Student;                   //定义Student结构体
    
    Student stu[10];  //包含10个Student结构体类型的结构体数组

    假如需要利用python实现以下结构体数组,并且需要赋值:

    typedef struct 
    {
        char  id;
        float  px;                 
        float py; 
        float vx;                 
        float  vy; 
    
    } GPS;
    
    GPS  Data[2];   
    
    #赋值
    
    Data[2]={{'00',1.1,1.2,1.3,1.4},{'01',2.1,2.2,2.3,2.4}}

     

    python中结构体数组构建方法

        方法一:利用NumPy进行操作

          参考博客:NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

        

    import numpy as np
    
    GPSType=np.dtype({'names':['id','px','py','vx','vy'],'formats':['S32','f','f','f','f']})
    
    Data=np.array([('zero',0.,0.)]*10,dtype=GPSType)  #创建Data[2]
    
    #结构体数组中成员赋值
    #Data[0]
    Data[0]['id']='00'
    Data[0]['px']=1.1
    Data[0]['py']=1.2
    Data[0]['vx']=1.3
    Data[0]['vy']=1.4
    
    #Data[1]
    Data[1]['id']='01'
    Data[1]['px']=2.1
    Data[1]['py']=2.2
    Data[1]['vx']=2.3
    Data[1]['vy']=2.4
    
    

      方法二:利用Class类进行操作

    参考博客:原 Python:类与结构体》 中的

    有时候我们可能需要像C中的struct那样的数据类型,把少量的数据项放在一起。Python中可以使用定义一个空类来实现这一点:

    class GPS:
        pass

    Data = [GPS()]*2 

    Data=[GPS(),GPS()]

    #Data[0]
    Data[0].id='00'
    Data[0].px=1.1
    Data[0].py=1.2
    Data[0].vx=1.3
    Data[0].vy=1.4
    
    #Data[1]
    Data[1].id='01'
    Data[1].px=2.1
    Data[1].py=2.2
    Data[1].vx=2.3
    Data[1].vy=2.4
    print(Data[0],Data[1])
    print(Data[0].px)

     

    展开全文
  • python实现结构体数组

    千次阅读 2019-09-20 12:55:19
    结构体数组 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组。和C语言一样,在NumPy中也很容易对这种结构数组进行...

    结构体数组

    在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组。和C语言一样,在NumPy中也很容易对这种结构数组进行操作。只要NumPy中的结构定义和C语言中的定义相同,NumPy就可以很方便地读取C语言的结构数组的二进制数据,转换为NumPy的结构数组。假设我们需要定义一个结构数组,它的每个元素都有name, age和salary字段。在NumPy中可以如下定义:

    import numpy as np
    MyType=np.dtype({
        'names':['name','age','salary'],
        'formats':['S32','i','f']#必须加s,且S大写
    })
    a=np.array([("tang",23,130.2),("wang",22,100.2)],
    dtype=MyType)
    #或者Data=np.array([(‘zero’,0.,0.)]*10,dtype=MyType) #创建Data[2]
    #Date[0]['name']="tang"
    
    

    我们先创建一个dtype对象persontype,通过其字典参数描述结构类型的各个字段。字典有两个关键字:names,formats。每个关键字对应的值都是一个列表。names定义结构中的每个字段名,而formats则定义每个字段*的类型:

    • S32 : 32个字节的字符串类型,由于结构中的每个元素的大小必须固定,因此需要指定字符串的
      长度
    • i : 32bit的整数类型,相当于np.int32
    • f : 32bit的单精度浮点数类型,相当于np.float32
      然后我们调用array函数创建数组,通过关键字参数dtype=MyType, 指定所创建的数组的元素类
      型为结构MyType。运行上面程序之后,我们可以在IPython中执行如下的语句查看数组a的元素类
    a.dtype
    

    结果显示:

    dtype([('name', 'S32'), ('age', '<i4'), ('salary', '<f4')])
    

    这里我们看到了另外一种描述结构类型的方法: 一个包含多个组元的列表,其中形如(字段名, 类型描述) 的组元描述了结构中的每个字段。类型描述前面为我们添加了 '<'字符,这些字符用来描述字段值的字节顺序:

    • <:低位字节在前
    • >:高位字节在前

    结构数组的存取方式和一般数组相同,通过下标能够取得其中的元素,注意元素的值看上去像是组元,实际上它是一个结构:

    a[0]
    
    

    结果显示:

    (b'tang', 23, 130.2)
    
    a[0].dtype
    

    结果显示:

    dtype([('name', 'S32'), ('age', '<i4'), ('salary', '<f4')])
    

    a[0]是一个结构元素,它和数组a共享内存数据,因此可以通过修改它的字段,改变原始数组中的对应字段:

    c=a[0]
    c["name"]="Lian"#修改元素属性
    a[0]["name"]
    

    结果显示:

    b'Lian'
    

    结构像字典一样可以通过字符串下标获取其对应的字段值:

    a[1]["name"]
    

    结果显示:

    b'wang'
    

    我们不但可以获得结构元素的某个字段,还可以直接获得结构数组的字段,它返回的是原始数组的视图,因此可以通过修改b[0]改变a[0][’‘age’’]:

    b=a[:]["salary"]#或者a["salary"]
    b
    

    结果显示:

    array([130.2, 100.2], dtype=float32)
    

    通过调用a.tostring或者a.tofile方法,可以直接输出数组a的二进制形式:

    a.tofile("test.bin")
    

    内存对齐

    C语言的结构体为了内存寻址方便,会自动的添加一些填充用的字节,这叫做内存对齐。例如如果把下面的name[32]改为name[30]的话,由于内存对齐问题,在name和age中间会填补两个字节,最终的结构体大小不会改变。因此如果numpy中的所配置的内存大小不符合C语言的对齐规范的话,将会出现数据错位。为了解决这个问题,在创建dtype对象时,可以传递参数align=True,这样numpy的结构数组的内存对齐和C语言的结构体就一致了。

    #include <stdio.h>
    
    struct person
    {
    	char name[32];
    	int age;
    	float weight;
    };
    
    struct person p[2];
    
    void main ()
    {
    	FILE *fp;
    	int i;
    	fp=fopen("test.bin","rb");
    	fread(p, sizeof(struct person), 2, fp);
    	fclose(fp);
    	for(i=0;i<2;i++)
    		printf("%s %d %f\n", p[i].name, p[i].age, p[i].weight);
    	getchar();
    }
    

    用下面的字典参数也可以定义结构类型,字典的关键字为结构中字段名,值为字段的类型描述,但是由于字典的关键字是没有顺序的,因此字段的顺序需要在类型描述中给出,类型描述是一个组元,它的第二个值给出字段的字节为单位的偏移量,例如age字段的偏移量为25个字节:

    np.dtype({"name":('S25',0),"age":(np.uint8,25)})
    

    结果显示:

    dtype([('name', 'S25'), ('age', 'u1')])
    
    
    
    展开全文
  • 结构体数组 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组。和C语言一样,在NumPy中也很容易对这种结构数组进行...

    结构体数组

    在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组。和C语言一样,在NumPy中也很容易对这种结构数组进行操作。只要NumPy中的结构定义和C语言中的定义相同,NumPy就可以很方便地读取C语言的结构数组的二进制数据,转换为NumPy的结构数组。假设我们需要定义一个结构数组,它的每个元素都有name, age和salary字段。在NumPy中可以如下定义:

    import numpy as np
    MyType=np.dtype({
        'names':['name','age','salary'],
        'formats':['S32','i','f']#必须加s,且S大写
    })
    a=np.array([("tang",23,130.2),("wang",22,100.2)],
    dtype=MyType)
    #或者Data=np.array([(‘zero’,0.,0.)]*10,dtype=MyType) #创建Data[2]
    #Date[0]['name']="tang"
    
    12345678910
    

    我们先创建一个dtype对象persontype,通过其字典参数描述结构类型的各个字段。字典有两个关键字:names,formats。每个关键字对应的值都是一个列表。names定义结构中的每个字段名,而formats则定义每个字段*的类型:

    • S32 : 32个字节的字符串类型,由于结构中的每个元素的大小必须固定,因此需要指定字符串的
      长度
    • i : 32bit的整数类型,相当于np.int32
    • f : 32bit的单精度浮点数类型,相当于np.float32
      然后我们调用array函数创建数组,通过关键字参数dtype=MyType, 指定所创建的数组的元素类
      型为结构MyType。运行上面程序之后,我们可以在IPython中执行如下的语句查看数组a的元素类
    a.dtype
    1
    

    结果显示:

    dtype([('name', 'S32'), ('age', '<i4'), ('salary', '<f4')])
    1
    

    这里我们看到了另外一种描述结构类型的方法: 一个包含多个组元的列表,其中形如(字段名, 类型描述) 的组元描述了结构中的每个字段。类型描述前面为我们添加了 '<'字符,这些字符用来描述字段值的字节顺序:

    • <:低位字节在前
    • >:高位字节在前

    结构数组的存取方式和一般数组相同,通过下标能够取得其中的元素,注意元素的值看上去像是组元,实际上它是一个结构:

    a[0]
    
    12
    

    结果显示:

    (b'tang', 23, 130.2)
    1
    a[0].dtype
    1
    

    结果显示:

    dtype([('name', 'S32'), ('age', '<i4'), ('salary', '<f4')])
    1
    

    a[0]是一个结构元素,它和数组a共享内存数据,因此可以通过修改它的字段,改变原始数组中的对应字段:

    c=a[0]
    c["name"]="Lian"#修改元素属性
    a[0]["name"]
    123
    

    结果显示:

    b'Lian'
    1
    

    结构像字典一样可以通过字符串下标获取其对应的字段值:

    a[1]["name"]
    1
    

    结果显示:

    b'wang'
    1
    

    我们不但可以获得结构元素的某个字段,还可以直接获得结构数组的字段,它返回的是原始数组的视图,因此可以通过修改b[0]改变a[0][’‘age’’]:

    b=a[:]["salary"]#或者a["salary"]
    b
    12
    

    结果显示:

    array([130.2, 100.2], dtype=float32)
    1
    

    通过调用a.tostring或者a.tofile方法,可以直接输出数组a的二进制形式:

    a.tofile("test.bin")
    1
    

    内存对齐

    C语言的结构体为了内存寻址方便,会自动的添加一些填充用的字节,这叫做内存对齐。例如如果把下面的name[32]改为name[30]的话,由于内存对齐问题,在name和age中间会填补两个字节,最终的结构体大小不会改变。因此如果numpy中的所配置的内存大小不符合C语言的对齐规范的话,将会出现数据错位。为了解决这个问题,在创建dtype对象时,可以传递参数align=True,这样numpy的结构数组的内存对齐和C语言的结构体就一致了。

    #include <stdio.h>
    
    struct person
    {
    	char name[32];
    	int age;
    	float weight;
    };
    
    struct person p[2];
    
    void main ()
    {
    	FILE *fp;
    	int i;
    	fp=fopen("test.bin","rb");
    	fread(p, sizeof(struct person), 2, fp);
    	fclose(fp);
    	for(i=0;i<2;i++)
    		printf("%s %d %f\n", p[i].name, p[i].age, p[i].weight);
    	getchar();
    }
    12345678910111213141516171819202122
    

    用下面的字典参数也可以定义结构类型,字典的关键字为结构中字段名,值为字段的类型描述,但是由于字典的关键字是没有顺序的,因此字段的顺序需要在类型描述中给出,类型描述是一个组元,它的第二个值给出字段的字节为单位的偏移量,例如age字段的偏移量为25个字节:

    np.dtype({"name":('S25',0),"age":(np.uint8,25)})
    1
    

    结果显示:

    dtype([('name', 'S25'), ('age', 'u1')])
    1
    1
    
    展开全文
  • 我是python的新手,并且一直在尝试仅针对此特定项目学习它.我正在做的是使用arduino克隆和NRf24收发器通过无线发送以下结构.struct SENSOR{float sensor1;float sensor2;float sensor3;};struct HEADER{long type;...
  • 编写一个程序,定义一个结构体...通过结构体变量定义结构体数组,存放下表所示的信息; 找出价格小于40元的书,并将其所有信息输出。 书号 书名 作者 价格 98765 C++ lily 43 98783 Java Rose 25 98784 Python
  • python结构体数组构建方法 方法一:利用NumPy进行操作 参考博客: NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构 import numpy as np GPSType=np.dtype({'names...
  • C语言第11题:结构体数组定义与使用 + 结构体数组排序C语言第11题:结构体数组定义与使用 + 结构体数组排序注意:一下赋值是不能使用的但是在结构体中是可以直接进行赋值操作的st[1] = st[2];printf(“姓名 = %s...
  • # 结构体定义 class Baz(): def __init__(self, name, place): self.name = name self.place = place ## 数组 my_foos = [] my_foos.append(Baz("foo", "Shop")) my_foos.append(Baz("bar", "Home"))
  • python 结构体数组的正确初始化方法

    千次阅读 2020-09-22 20:28:09
    python并没有C语言中的结构体概念,可以使用对象代替结构体存储数据。 特别注意 列表=[对象]*N 这种写法是错误的,因为初始化得到的N个对象指向相同的地址,实验如下: class Phase_struct: pass #方法1 phases1 = ...
  • 但是在结构体中是可以直接进行赋值操作的 st[1] = st[2]; printf(“姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n”,st[1].name,st[1].age,st[1].classes,st[1].score); 结构体使可以进行互相赋值的 struct A a1 = ...
  • C++之结构体数组

    2021-08-07 11:01:12
    文章目录1、定义结构体2、创建结构体数组3、给结构体数组中的元素赋值4、访问结构体数组中的值 #include <iostream> using namesapce std; #include <string> 1、定义结构体 struct Student{ String ...
  • matlab结构体数组定义方法

    万次阅读 2019-03-21 14:47:58
    当需要定义的参数变量较多时,往往需要用到结构体,Matlab中结构体数组python中字典概念差不多,使用方法也类似,下面详细介绍其定义方法。 方法一: 直接定义,如定义 // An highlighted block students.name = '...
  • go语言结构体数组定义 介绍 (Introduction) Building abstractions around concrete details is the greatest tool that a programming language can give to a developer. Structs allow Go developers to describe...
  • POINTER(ThreatClass) #dll.add_stu.restype = c_int #ret = dll.add_stu(byref(threat)) #entrylist.append(threat) i = i+1 #定义结构体数组,批量插入 ThreatArray = (ThreatClass * i)(*entrylist) dll.add_stus....
  • 统计选票程序(结构体数组

    千次阅读 2019-02-26 08:45:18
    题目 有三个候选人,每个选民只能选一人,编写一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。 代码 #include &amp;lt;stdio.h&... //定义结构体数组,并初始化 str...
  • JNA结构体数组

    2018-03-08 14:05:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 在做自动化测试的过程中,我需要使用python调用C++的SDK,完成接口测试的工作。由于团队只提供了C++的SDK源码,所以我需要做下面几件事: 封装C++的接口,进行接口的导出 ...参数中有结构体,返回值是结构体,返
  • cuda 从CPU到GPU的结构体数组传输

    千次阅读 2018-05-10 16:58:45
    结构体的数组传输,目前的理解是在...目前指针只用到了一维的,在GPU中定义结构体: 在这个结构体中有三个变量datalen,__padding,ptr。其中ptr是一个指针,datalen指的当前ptr中的数据长度,__padding为占位符无...
  • 怎么用结构体数组

    2017-01-05 14:19:42
    需要定义一个结构体数组,拿来给2个核进行数据通信 typedef struct SE3Treacker_Buffer { float px; float py; float pz; }SE3buf; SE3buf se3bufs[1000]; //定义成了全局变量 //之后赋值 int buf_...
  • JS自定义结构体数组

    千次阅读 2014-07-30 15:02:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 我希望访问结构体数组成员,像下面这样: iid[iid_idx].OriginalFirstThunk = 0xxxxxxxxx 但是python报错误如下: TypeError: '_ctypes.ArrayType' object is unindexable. 请问我该如何访问该结构体数组中...
  • emmm,之前的已经学了一点点PY了,但今天又碰到一题大整数的卡了好一会儿,于是做个笔记记录一下今天学的 首先是读入,之前的只能读一行一个数,显然太过狭隘了,现在我...接下来就是结构体了,但在python里面使用...
  • 接下来接着介绍多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构 一、多维数组的存取 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用组元(tuple)作为...
  • 都不能进行格式化输出输入     //fgets() ...从键盘上接收一个字符串保存到数组中      scanf()缺点 不能接收空格   gets(str) 优点 :可以接收空格    */   char str[10] ;   fgets(str,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,454
精华内容 3,781
关键字:

python定义结构体数组

python 订阅