代码之家  ›  专栏  ›  技术社区  ›  codersanchez

为什么我的代码没有给出所需的输出[重复]

  •  1
  • codersanchez  · 技术社区  · 2 年前
    l = [(2, 1), (1, 2), (4, 4), (2, 3), (2, 5)]
    a = []
    l1 = l
    n = len(l)
    for i in range(n):
        a.append(l[i][1])
    b = sorted(a)
    for i in range(n):
        for j in range(n):
            if (l1[j][1] == b[i]):
                l[i] = l1[j]
                break;
    
    print(l)
    

    我写了这个python代码来重新排列输入列表的元素,按照每个元组的升序排列元素(列表中的元组被视为元素)1st索引值; 例如

    input = [(2, 1), (1, 2), (4, 4), (2, 3), (2, 5)]
    

    输出应该是

    l = [(2, 1), (1, 2), (2, 3), (4, 4), (2, 5)] 
    

    (请参阅每个元组的第二个元素按1、2、3、4、5的升序排列)我的代码有什么问题

    2 回复  |  直到 2 年前
        1
  •  1
  •   blhsing    2 年前

    以下任务:

    l1 = l
    

    l1 成为引用与 l ,所以当您修改 l 在索引处 i 与:

    l[i] = l1[j]
    

    你实际上也修改了 l1 在索引处 ,所以什么时候 j 迭代为的过去值之一 , l1[j] 将不再具有原始元素的值。

    您可以通过为创建新的列表对象来解决此问题 l1 值复制自 l 相反:

    l1 = l.copy()
    
        2
  •  1
  •   Mahboob Nur    2 年前

    您没有对原始列表进行排序 l 根据每个元组的第二个元素的升序正确地。 我已经修改了你的代码,它可以工作。

    l = [(2, 1), (1, 2), (4, 4), (2, 3), (2, 5)]
    sorted_l = sorted(l, key=lambda x: x[1])
    print(sorted_l)
    

    Output