替代Python中的二维数组

时间:2013-02-24 04:44:11

标签: python arrays class

我需要一个n元素数组,其中每个元素都有2个属性。

A.element[0].name="qwe"
A.element[0].age=23
A.element[1].name="www"
A.element[1].age=24
...
A.element[n].name="e"
A.element[n].age=25

是否有其他形式不涉及设计课程?

3 个答案:

答案 0 :(得分:4)

collections.namedtuple

>>> from collections import namedtuple
>>> Element = namedtuple('Element', 'name age')
>>> A.element[0] = Element('qwe', 23)
>>> print A.element[0].name
qwe
>>> print A.element[0].age
23

然而,这些是元组,而不是列表,因此无法更改。此外,这些仍然是类,但您只是不使用class关键字定义它们。有关详细说明,请参阅this

答案 1 :(得分:2)

您可以使用一系列词典。

这样的事情:

A = [
    {'name': 'qwe', 'age': 23},
    {'name': 'www', 'age': 24}
]

您可以通过执行以下操作来简化插入:

A = []

def addPerson(name, age):
    global A
    A.append({'name': name, 'age': age})

或者只是将字典变成数组,因此您不必在每行中指定“name”和“age”。写一个代表一个人的类(或其他任何东西)可能更容易。

答案 2 :(得分:1)

如果你使用numpy,你也可以使用结构数组:

In [66]: struct = np.dtype([("name", np.object), ("age", np.int)])
a = np.array([("abc", 12), ("def", 20), ("xyz", 50)], dtype=struct)
a[0]
Out[66]: ('abc', 12)

In [67]: a[0]["name"]
Out[67]: 'abc'

In [68]: a["name"]
Out[68]: array([abc, def, xyz], dtype=object)

In [69]: a["age"]
Out[69]: array([12, 20, 50])

In [72]: a["age"][2]
Out[72]: 50