在列表/数组python中打包不同数据类型的多个变量

2024-10-01 15:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个变量,我需要打包成一个,然后像在数组或列表中那样按顺序保存。这需要在Python中完成,而我还处于Python婴儿期。在

例如,在Python中:

a = Tom
b = 100
c = 3.14
d = {'x':1, 'y':2, 'z':3}

所有这些都在一个连续的数据结构中。为了清晰起见,我可能也会尝试和C++类似的实现。在

^{pr2}$

如果有人能给我一个类似的实现来存储,迭代和修改内容将是非常有帮助的。任何指向正确方向的指示对我也有好处。在

谢谢


Tags: 数据结构内容列表顺序数组指向tompr2
3条回答

只使用列表:

a = "Tom"
b = 100
c = 3.14
d = {'x':1, 'y':2, 'z':3}

data = [a, b, c, d]

print data
for item in data:
    print item

输出:

^{pr2}$

您可以使用米迦勒的“强”字典<强>(但是您需要访问{{CD1>}的内容,使用{{CD2>},这有点麻烦),或者可以使用<强>等效的C++的结构><强>:<强>命名元组< /强>:

import collections

node = collections.namedtuple('node', 'a b c d')

# Tom = ...

v = node(Tom, 100, 3.14, {'x':1, 'y':2, 'z':3})
print node  # node(a=…, b=100, c=3.14, d={'x':1, 'y':2, 'z':3})
print node.c  # 3.14
print node[2]  # 3.14 (works too, but is less meaningful and robust than something like node.last_name)

这类似于,但比定义自己的类更简单:type(v) == node,等等。但是请注意,正如volcano指出的,存储在namedtuple中的值是不可更改的(a namedtuple是不可变的)。在

如果确实需要修改记录中的值,最好的选择是

^{pr2}$

最后一个选项,我不推荐,实际上是使用一个列表或一个元组,就像ATOzTOA提到的那样:元素必须以一种不那么易读的方式访问:node[3]没有{}更有意义;而且,您也不容易更改字段的顺序,使用列表或元组时(如果访问命名元组或自定义类属性,则顺序无关紧要)。在


多个node对象通常放在一个列表中,这是用于此目的的标准Python结构:

all_nodes = [node(…), node(…),…]

或者

all_nodes = []
for … in …:
    all_nodes.append(node(…))

或者

all_nodes = [node(…) for … in …]

最好的方法取决于如何创建各种node对象,但在许多情况下,列表可能是最好的结构。在

但是,请注意,如果您需要存储类似于电子表格表的内容,并且需要访问其列的速度和便利性,那么最好使用NumPy的record arrays,或者类似于Pandas的包。在

你可以把所有的值放在字典里,然后列出这些字典。在

{'a': a, 'b': b, 'c': c, 'd': d}

否则,如果此数据可以由类表示,例如“Person”;请创建Person类型的类,并使用您的数据创建该类的对象:

http://docs.python.org/2/tutorial/classes.html

相关问题 更多 >

    热门问题