在元组liss列表中交换参数

时间:2017-11-14 16:24:20

标签: python list tuples

我有一个以下形式的元组列表列表:

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]))

非常感谢每一个帮助

2 个答案:

答案 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有一个很好的答案,为什么创建一个新的元组是正确的方法。