我有一个以下形式的元组列表列表:
a = [[( 0, 1),
( 2, 3),
( 4, 5)],
[( 6, 7),
( 8, 9),
(10, 11)],
[(12, 13),
(14, 15),
(16, 17)]]
我想做的是交换元组内的两个参数。
我已经尝试了以下两个选项,但没有成功,争论者保持其立场:
for i in range(0, len(a)-1):
for j in range(0, len(a)/2):
a[i][j] = a[i][j][1], a[i][j][0]
a[i][j] = tuple(reversed(a[i][j]))
非常感谢每一个帮助
答案 0 :(得分:0)
元组是不可变的,所以你应该用反转的元组替换元组,而不是尝试就地修改第一个元组:
def build_model(layers):
model = Sequential()
model.add(LSTM(
input_dim=layers[0],
output_dim=layers[1],
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
layers[2],
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(
output_dim=layers[3])) #works if layers[2]
model.add(Activation("linear"))
start = time.time()
model.compile(loss="mse", optimizer="rmsprop",metrics=['accuracy'])
print("Compilation Time : ", time.time() - start)
return model
这会使用列表订阅更新列表中每个元组位置的项目,并使用新的反转元组(使用反向切片表示法for lst in a:
for i, x in enumerate(lst):
lst[i] = x[::-1]
)。
要使用交换的对象创建新的列表列表,您可以使用列表解析:
[::-1]
答案 1 :(得分:0)
考虑将您的循环更改为:
for i in range(0, len(a)):
for j in range(0, len(a[i])):
a[i][j] = tuple(reversed(a[i][j]))
为了迭代列表列表(在这种情况下为元组),您需要确保正确指定每个部分的长度。在外循环中的len(a)-1中,您不需要-1,因为范围(x,y)已经从x到y-1。在内部循环中,您需要指定内部列表的长度。
@Moses有一个很好的答案,为什么创建一个新的元组是正确的方法。