gpt4 book ai didi

python - 在 python 中处理未知列表结构的更好方法是什么?

转载 作者:行者123 更新时间:2023-11-28 22:02:43 27 4
gpt4 key购买 nike

我的 python 程序从 C 库接收 MIDI 数据。有时数据看起来像这样:

[[[[240,0,1,116]]],[[[3,100,8,1]]],[[[107,247,0,0]]]]

有时它会包含这样的时间戳:

[[[[240,0,1,116],26738]],[[[3,100,8,1],26738]],[[[107,247,0,0],26738]]]

我需要字节数组中的数据,并丢弃时间戳值。我为此编写的代码是:

        def convertMidiSysex(data):    
while isinstance(data[0][0], list):
out = []
for index, value in enumerate(data):
out = out+value
data = out

out = array.array('B')
for i in range(len(data)):
if isinstance(data[i], list):
for j in range(len(data[i])):
out.append(data[i][j])
if out[-1] == 247: # 0xF7 is marker to end sysex message
return out

我不禁觉得自己做这件事很辛苦。对此有更好的方法吗?

最佳答案

假设深度总是一致的:

from itertools import takewhile

def convertMidiSysex(data):
values = takewhile(lambda v: v != 247,
(a for x in data for a in x[0][0]))
out = array.array('B', values)
out.append(247)
return out

例子:

>>> convertMidiSysex([[[[240,0,1,116]]],[[[3,100,8,1]]],[[[107,247,0,0]]]])
array('B', [240, 0, 1, 116, 3, 100, 8, 1, 107, 247])
>>> convertMidiSysex([[[[240,0,1,116],26738]],[[[3,100,8,1],26738]],[[[107,247,0,0],26738]]])
array('B', [240, 0, 1, 116, 3, 100, 8, 1, 107, 247])

关于python - 在 python 中处理未知列表结构的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902030/

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