IIUC,一种方法是
itertools.chain
使…的结果变平
zip(samples)
:
from itertools import chain
new_samples = [
list(chain.from_iterable(y)) for y in zip(
*((chain.from_iterable(*x)) for x in zip(samples))
)
]
print(new_samples)
#[['A', 'E', '1'], ['B', 'F', '2'], ['C', 'G', '3'], ['D', 'H', '4']]
循序渐进的解释
1) 第一次通话
zip
在
samples
:
print(list(zip(samples)))
#[([[['A', 'E'], ['B', 'F']], [['C', 'G'], ['D', 'H']]],),
# ([[['1'], ['2']], [['3'], ['4']]],)]
注意,在上面输出的两行中,如果元素被展平,您将拥有
拉链
为了得到你的最终结果。
2) 使用
itertools.chain
to flatten
(这将是很多
more efficient than using
sum
).
print([list(chain.from_iterable(*x)) for x in zip(samples)])
#[[['A', 'E'], ['B', 'F'], ['C', 'G'], ['D', 'H']],
# [['1'], ['2'], ['3'], ['4']]]
3) 现在打电话
拉链
再一次:
print(list(zip(*((chain.from_iterable(*x)) for x in zip(samples)))))
#[(['A', 'E'], ['1']),
# (['B', 'F'], ['2']),
# (['C', 'G'], ['3']),
# (['D', 'H'], ['4'])]
4) 现在你基本上得到了你想要的,除了列表是嵌套的。所以使用
itertools.chain
再次压平最终列表。
print(
[
list(chain.from_iterable(y)) for y in zip(
*((chain.from_iterable(*x)) for x in zip(samples))
)
]
)
#[['A', 'E', '1'], ['B', 'F', '2'], ['C', 'G', '3'], ['D', 'H', '4']]