拆分列表中的数组
Split the array in a list
我有一个列表,其中有一个像
这样的数组
ListA = [('8', array([[422, 769, 468, 789],
[422, 739, 468, 759],
[422, 709, 468, 729],
[422, 545, 468, 565],
[422, 515, 468, 535]]), 'A'),
('8', array([[423, 483, 466, 506]]), 'A'),
('8', [], 'B'),
('9', array([[375, 579, 414, 619],
[375, 549, 414, 589],
[375, 519, 414, 559]]), 'C')]
现在列表中的数组将以这样的方式拆分,输出看起来像
ListA = [('8', [422, 769, 468, 789], 'A'),
('8', [422, 739, 468, 759], 'A'),
('8', [422, 709, 468, 729], 'A'),
('8', [422, 545, 468, 565], 'A'),
('8', [422, 515, 468, 535], 'A'),
('8', [423, 483, 466, 506], 'A'),
('8', [], 'B'),
('9', [375, 579, 414, 619], 'C'),
('9', [375, 549, 414, 589], 'C'),
('9', [375, 519, 414, 559], 'C')]
有什么办法可以做到这一点吗?
output = []
for line in ListA:
number, arr, char = line
if len(arr) == 0: #append empty row
output.append((number, [], char))
for row in arr:
output.append((number, row, char))
这是 flatmap
的工作:
def flatmap(func, *iterable):
return itertools.chain.from_iterable(map(func, *iterable))
def tuplewitharray_to_listoftuples(t):
n, arr, c = t
if len(arr) > 0:
return [(n, row, c) for row in arr]
else:
return [(n, [], c)]
list(flatmap(tuplewitharray_to_listoftuples, ListA))
输出:
[('8', [422, 769, 468, 789], 'A'),
('8', [422, 739, 468, 759], 'A'),
('8', [422, 709, 468, 729], 'A'),
('8', [422, 545, 468, 565], 'A'),
('8', [422, 515, 468, 535], 'A'),
('8', [423, 483, 466, 506], 'A'),
('8', [], 'B'),
('9', [375, 579, 414, 619], 'C'),
('9', [375, 549, 414, 589], 'C'),
('9', [375, 519, 414, 559], 'C')]
我有一个列表,其中有一个像
这样的数组ListA = [('8', array([[422, 769, 468, 789],
[422, 739, 468, 759],
[422, 709, 468, 729],
[422, 545, 468, 565],
[422, 515, 468, 535]]), 'A'),
('8', array([[423, 483, 466, 506]]), 'A'),
('8', [], 'B'),
('9', array([[375, 579, 414, 619],
[375, 549, 414, 589],
[375, 519, 414, 559]]), 'C')]
现在列表中的数组将以这样的方式拆分,输出看起来像
ListA = [('8', [422, 769, 468, 789], 'A'),
('8', [422, 739, 468, 759], 'A'),
('8', [422, 709, 468, 729], 'A'),
('8', [422, 545, 468, 565], 'A'),
('8', [422, 515, 468, 535], 'A'),
('8', [423, 483, 466, 506], 'A'),
('8', [], 'B'),
('9', [375, 579, 414, 619], 'C'),
('9', [375, 549, 414, 589], 'C'),
('9', [375, 519, 414, 559], 'C')]
有什么办法可以做到这一点吗?
output = []
for line in ListA:
number, arr, char = line
if len(arr) == 0: #append empty row
output.append((number, [], char))
for row in arr:
output.append((number, row, char))
这是 flatmap
的工作:
def flatmap(func, *iterable):
return itertools.chain.from_iterable(map(func, *iterable))
def tuplewitharray_to_listoftuples(t):
n, arr, c = t
if len(arr) > 0:
return [(n, row, c) for row in arr]
else:
return [(n, [], c)]
list(flatmap(tuplewitharray_to_listoftuples, ListA))
输出:
[('8', [422, 769, 468, 789], 'A'),
('8', [422, 739, 468, 759], 'A'),
('8', [422, 709, 468, 729], 'A'),
('8', [422, 545, 468, 565], 'A'),
('8', [422, 515, 468, 535], 'A'),
('8', [423, 483, 466, 506], 'A'),
('8', [], 'B'),
('9', [375, 579, 414, 619], 'C'),
('9', [375, 549, 414, 589], 'C'),
('9', [375, 519, 414, 559], 'C')]