matlab就像python中的struct一样

时间:2018-03-28 11:40:07

标签: python matlab list struct

你能建议在python中用干净的方式表示这个结构吗?

students = struct;
students(1).fname = 'john';
students(1).lname ='smith';
students(1).height = 180;

students(2).fname = 'dave';
students(2).lname = 'clinton';
students(2).height = 184;

谢谢!

3 个答案:

答案 0 :(得分:2)

在Python中,您可以创建一个类(有点像结构但具有更多功能),如下所示:

class Student()
    def __init__(self, fname, lname, height):
        self.fname = fname
        self.lname = lname
        self.height = height

__init__函数描述了制作新学生记录所需的信息。 'self'参数告诉Python你想要在一个实例(一个实际的学生记录)而不是在类(这是学生记录的蓝图)上设置这些变量。然后,您可以按如下方式创建学生的实例:

my_student = Student('Space', 'Man', 180)

您可以创建许多这些实例并将每个实例附加到列表中:

all_students = [] # An empty list
all_students.append(my_student) # using the instance we've already created
all_students.append(Student('Jingle', 'Sting', 180)) # a new instance

然后,您可以按如下方式访问列表中的项目:

all_students[1]

通过创建一个类,您还可以创建适用于所有学生实例的方法。

class Student()
    def __init__(self, fname, lname, height):
        self.fname = fname
        self.lname = lname
        self.height = height

    def get_height_in_meters(self):
        return self.height / 100

并像这样使用它们:

my_student.get_height_in_meters()

您甚至可以使用适用于它们的方法直接从列表中访问学生记录:

all_students[1].get_height_in_meters()

答案 1 :(得分:1)

这可以通过创建字典列表来完成,如下所示:

students = [
    {'fname': 'john', 'lname': 'smith', 'height': 180},
    {'fname': 'dave', 'lname': 'clinton', 'height': 184}
]

然后,您可以通过students[n]或第n位学生的特定字段students[n]['fname']

来获得第n名学生

答案 2 :(得分:1)

使用namedtuple(s)列表:

import collections
harry = student(fname="harry", lname="Potter", height=160)
hermione = student(fname="hermione", lname="Granger", height=140)

students = [
    harry,
    hermione
]
print(students[0].fname)
print(students[1].fname)