ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2018-10-13 16:33:38  阅读:5382  来源: 互联网

标签:


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

 

标签:
来源: https://blog.csdn.net/qq_23981335/article/details/83039130

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有