提问人:codersanchez 提问时间:10/20/2023 最后编辑:TheMastercodersanchez 更新时间:10/20/2023 访问量:64
为什么我的代码没有给出所需的输出 [duplicate]
Why my code is not giving the desired output [duplicate]
问:
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 代码来重新排列输入列表的元素,使 element(列表中的元组被视为元素)根据每个元组 1st 索引值的升序放置; 例如
input = [(2, 1), (1, 2), (4, 4), (2, 3), (2, 5)]
输出应为
l = [(2, 1), (1, 2), (2, 3), (4, 4), (2, 5)]
(请参阅每个元组的第 2 个元素按升序排列 1、2、3、4、5) 我的代码有什么问题
答:
1赞
blhsing
10/20/2023
#1
使用以下分配:
l1 = l
l1
成为引用与 相同的列表对象的名称,因此,当您在索引处修改时:l
l
i
l[i] = l1[j]
您实际上也修改了 at 索引,因此当迭代到过去的值之一时,将不再具有原始元素的值。l1
i
j
i
l1[j]
您可以通过创建一个新的列表对象来解决此问题,该对象的值是从以下位置复制的:l1
l
l1 = l.copy()
评论
1赞
codersanchez
10/20/2023
兄弟,非常感谢你,它现在可以工作了
0赞
Weijun Zhou
10/20/2023
@codersanchez 您应该投赞成票并接受答案,而不是发表评论。
0赞
codersanchez
10/20/2023
我试过了,但似乎我不能投票,因为我没有足够的声誉
0赞
blhsing
10/20/2023
@codersanchez 您可以通过单击答案旁边的灰色复选标记来接受答案,无需信誉。
1赞
Mahboob Nur
10/20/2023
#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)
评论
b
a=sorted(l, key=lambda x:x[1])
l1=l