首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这种排序方法在Python中不起作用?

为什么这种排序方法在Python中不起作用?
EN

Stack Overflow用户
提问于 2019-06-09 23:53:49
回答 2查看 61关注 0票数 0

我的代码不使用python中的sorted函数来对列表进行排序。输出结果与预期相反(从大到小,而不是从小到大)

将<更改为a>似乎有帮助,但我不确定为什么会这样

代码语言:javascript
复制
lista=[2,1,5,1,3,6]

for i in range(len(lista)):
  for l in range(len(lista)):
    if i==l:
      continue
    if lista[l]<lista[i]:
      temp=lista[i]
      lista[i]=lista[l]
      lista[l]=temp


print(lista)

预期输出列表从小到大,但得到的结果与之相反,除非我将< sign to a>符号改为a>符号,但我不确定这是为什么?

EN

回答 2

Stack Overflow用户

发布于 2019-06-10 00:14:19

试着在纸上写下你的算法的每次迭代:

代码语言:javascript
复制
i = 0: 2 1 5 1 3 6
i = 1: 1 2 5 1 3 6 
i = 2: 2 1 5 1 3 6

你的问题是,内部循环for l in range(len(lista)):每次都从0开始,但是你必须从位置i开始,当你完成内部循环时,i递增到1,i之前的所有东西都已经排序了。如果内部循环从头开始重新启动,比如在本例中,1小于2(在i=1时),则再次交换它。

代码语言:javascript
复制
lista=[2,1,5,1,3,6]

for i in range(len(lista)):
   for l in range(i, len(lista)):
       if i==l:
           continue
       if lista[l]<lista[i]:
           temp=lista[i]
           lista[i]=lista[l]
           lista[l]=temp

我建议您阅读有关insertion sortselection sort的文章,以便更好地了解此算法。

票数 3
EN

Stack Overflow用户

发布于 2019-06-10 00:02:46

问题是第二个循环会再次遍历整个列表。您想要做的是查看其余的元素:

代码语言:javascript
复制
lista = [2, 1, 5, 1, 3, 6]

for i in range(len(lista)):
    # change range to start at i
    for l in range(i, len(lista)):
        if i == l:
            continue
        if lista[l] < lista[i]:
            temp = lista[i]
            lista[i] = lista[l]
            lista[l] = temp

编辑:更具体地说,想一想在外部循环的最后一次迭代中发生了什么。lista[i]将是列表中的最后一个点,每次lista[l]变小时都会交换,因此最终会得到最小的数字作为最后一个数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56516090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档