Zip-ind-Zip不跟踪更改



我试图同时对两个列表执行一些操作。基本上,我有训练/测试集和它们的标签。如果我做了这样的事情:

x_train=[1,2,3,4]
x_test=[1,4,3,2]
y_train=[4,3,2,2]
y_test=[1,2,4,4]
for x,y in zip([x_train,x_test],[y_train,y_test]):
x.append(2)
y.append(3)

我将更新每个列表并获得x_train=[1,2,3,4,2], y_train=[4,3,2,2,2]...

等等。然而,如果在那之后我试图打乱它们的

for x,y in zip([x_train,x_test],[y_train,y_test]):
x.append(2)
y.append(3)
c=list(zip(x,y))
shuffle(c)
x,y=zip(*c)

这仍然返回x_train=[1,2,3,4,2],y_train=[4,3,2,2,2] ...

当然,我可以在for循环之外对每一组进行混洗,但在我的实际情况下,我会压缩更多的列表,所以这个选项看起来不太好。

将值重新分配给迭代器-上例中为xy-不会以任何方式影响迭代集合,因此集合-上例的x_trainy_train等-保持不变。示例:

items = list(range(5))
for i in items:
i = i * 2
print(items)  # [0, 1, 2, 3, 4]

请参阅下面原始示例的添加注释:

for x,y in zip([x_train,x_test],[y_train,y_test]):
x.append(2)
y.append(3)
c=list(zip(x,y))
shuffle(c)
x,y=zip(*c)  # This has no effect on x_train, x_test, y_train, y_test

相关内容

  • 没有找到相关文章

最新更新