Zip inside zip 不跟踪更改

Zip inside zip does not track changes

我正在尝试同时对两个列表执行一些操作。基本上,我有 train/test 集和他们的标签。如果我这样做:

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)

这个还是returnsx_train=[1,2,3,4,2],y_train=[4,3,2,2,2] ...

我当然可以在每个集合的 for 循环之外洗牌,但在我的真实情况下,我压缩了更多列表,所以这个选项看起来不太好。

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

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