gpt4 book ai didi

python - 如何使用 zip 连接深层嵌套列表的最里面的元素

转载 作者:行者123 更新时间:2023-12-01 00:43:02 30 4
gpt4 key购买 nike

假设我有以下包含列表的列表:

samples = [
# First sample
[
# Think 'x' as in input variable in ML
[
['A','E'], # Data
['B','F'] # Metadata
],
# Think 'y' as in target variable in ML
[
['C','G'], # Data
['D','H'], # Metadata
]
],
# Second sample
[
[
['1'],
['2']
],
[
['3'],
['4']
]
]
]

我想要的输出如下所示:

>>> samples
[
['A','E','1'], # x.data
['B','F','2'], # x.metadata
['C','G','3'], # y.data
['D','H','4'] # y.metadata
]

我的问题是是否存在一种方法来利用Python的zip函数以及一些列表理解来实现这一点?

我搜索了一些解决方案,但例如 thisthis处理使用 zip 来寻址不同的列表,而不是内部列表。

实现这一目标的方法很可能只是对样本进行简单的迭代,如下所示:

x,x_len,y,y_len=[],[],[],[]

for sample in samples:
x.append(sample[0][0])
x_len.append(sample[0][1])
y.append(sample[1][0])
y_len.append(sample[1][1])

samples = [
x,
x_len,
y,
y_len
]

我仍然很好奇是否存在一种方法可以利用 zip 而不是 for 循环样本及其嵌套列表。

请注意,不同样本的数据元数据的长度可能不同。

最佳答案

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) 首先对 samples 调用 zip:

print(list(zip(samples)))
#[([[['A', 'E'], ['B', 'F']], [['C', 'G'], ['D', 'H']]],),
# ([[['1'], ['2']], [['3'], ['4']]],)]

请注意,在上面输出的两行中,如果元素被展平,您将拥有 zip 所需的结构以获得最终结果。

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)现在再次调用zip:

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']]

关于python - 如何使用 zip 连接深层嵌套列表的最里面的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57202032/

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