【发布时间】:2019-12-03 17:39:31
【问题描述】:
假设我有以下包含列表的列表:
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 函数以及一些列表推导来实现此目的的方法?
我已经搜索了一些解决方案,但例如 this 和 this 处理使用 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 循环样本及其嵌套列表。
请注意,data 和 metadata 的长度可能因样本而异。
【问题讨论】:
-
最里面的列表总是长度为 1 吗?
-
你能修改最初创建样本的内容吗?
-
@AKX 不,他们不是。它们实际上是可变长度张量。然而,这可能与这里无关。我只是想知道是否存在一种方法来组合来自类似结构的列表对象的数据。
-
@Sayse 不幸的是,由于对我的数据使用了两个单独的框架(
torch和skorch),我的选择非常有限。
标签: python list nested iteration list-comprehension