gpt4 book ai didi

Python - 如何保留列表中元素的类型

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:57 27 4
gpt4 key购买 nike

首先向 Python 爱好者们表示歉意,C/C++ 程序员不得不做一些 Python 工作。

我正在移植一些 C(不是 C++),所以我本质上想创建一个结构列表来传递初始化、处理和通过串行端口写入设备。

我让Python非常靠近C,所以当C更新时,Python可以很容易地获得相同的更新,所以这意味着它看起来是程序化的,并且我意识到有些东西是无意义的,比如创建一个数组,传递它被初始化并接收它(我知道我创建并传入的那个是多余的)

我的问题是,当数组到达进行处理时,我的记录类型列表已变成平面列表,因此我无法再按名称访问记录类型的元素。

我可以将它们转换回来(也称为重新创建列表中的每个元素),但我宁愿弄清楚如何保持类型信息完整。

我将代码提炼为以下内容:

GainSettings = recordtype('GainSettings', 'label value')

def init_arrays(Gains):
labels = [ "Gain_1:", "Gain_2:", "Gain_48:" ]
for itr in range(3):
value = []
value.extend([0] * CHANNELS)
label = labels[itr]
entry = GainSettings(label, value)
Gains.extend(entry)
return True, Gains

def process_array(Gains):
thing = Gains[0].label # dies here with AttributeError: 'str' object has no attribute 'label'
thing += "wibble"
Gains[0].label = thing
return True, Gains

def main(args):
# char* label;
# sint16 value[CHANNELS];
Gains = [] # will be array of gain settings
ret, Gain = init_arrays(Gains)
ret, Gains = process_array(Gains)

我有一个断点,它失败了,所以我可以检查数组,这告诉我:

>>> print type(Gains)
<type 'list'>
>>> print Gains
['Gain_1:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Gain_2:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Gain_48:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
<type 'list'>
>>> print type(Gains[0])
<type 'str'>
>>> print type(Gains[1])
<type 'list'>

我希望它是一个“GainSettings”列表。

实际上有许多类似的数组,它们有共同的项目,例如标签,处理函数应该采用任何类型的数组并使用类似的部分来完成工作。

TIA

克里斯

最佳答案

我认为你应该检查这个字符串:

Gains.extend(entry)

这只是将标签和值依次放入增益列表中。

考虑使用

Gains.append(entry)

这不会解压元组,而是将其整个附加到您的列表中。

关于Python - 如何保留列表中元素的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39788683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com