我试图同时对两个列表执行一些操作。基本上,我有训练/测试集和它们的标签。如果我做了这样的事情:
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循环之外对每一组进行混洗,但在我的实际情况下,我会压缩更多的列表,所以这个选项看起来不太好。
将值重新分配给迭代器-上例中为x
、y
-不会以任何方式影响迭代集合,因此集合-上例的x_train
、y_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