jcpython2 发表于 2022-10-12 10:07:25

我这个列表循环从小排序,逻辑错在那里了?

本帖最后由 jcpython2 于 2022-10-12 10:11 编辑

思路是不断缩减min的范围,把每次循环到的最小值替换到第一个值

a=
for i in range(len(a)):
    minV = min(a)         #最小值
    minI = a[::].index(minV)    #最小值位置
    nowV = a               #现值
    nowI = a.index(nowV)      #现值位置

    a,a = a,a #现值最小值互换
    print(a)


逻辑错在哪一步?

jackz007 发表于 2022-10-12 10:17:50

      这一句
    minI = a[::].index(minV)    #最小值位置
      应该是这样?
    minI = a.index(minV)    #最小值位置

jcpython2 发表于 2022-10-12 10:28:41

jackz007 发表于 2022-10-12 10:17
这一句

      应该是这样?

也不对呢

jackz007 发表于 2022-10-12 10:43:16

本帖最后由 jackz007 于 2022-10-12 10:52 编辑

jcpython2 发表于 2022-10-12 10:28
也不对呢
    再试试这个
a =
for i in range(len(a) - 1):
    minV = min(a)
    minI = a . index(minV)
    a , a = a , a
    print(a)
    运行实况:
D:\\Python>python x.py















D:\\Python>
    通过
minI = a . index(minV)
    获得的索引 minI 是针对 a 的,也就是说,是从索引 i 开始起算的,所以,真正的索引是 minI + i

jcpython2 发表于 2022-10-12 10:50:45

jackz007 发表于 2022-10-12 10:43
再试试这个

    通过



要补回缩小范围内的值才能得出最小值真正在列表的位置

简单滴滴 发表于 2022-10-12 11:45:42

a=
for i in range(len(a)):
    mina = min(a)
    indexa = a.index(mina,i)
    a.pop(indexa)
    a.insert(i,mina)
    print(a)

看一下,这种思路,获取最小值,然后删除,再添加到前面

jcpython2 发表于 2022-10-12 18:51:04

本帖最后由 jcpython2 于 2022-10-12 20:32 编辑

jackz007 发表于 2022-10-12 10:43
再试试这个

    运行实况:


老哥你的提点我又改进了下,并且做了笔记,不要怕我白吃你们的回复

a =

for i in range(len(a)):
    mv = min(a)
    mi = a.index(mv,i)
    a,a = a,a
print(a)

笔记
a =
mi = a.index(3)
mi2 = a.index(3,5)
print(mi)
print(mi2)
mi输出3在指定范围内的位置
mi2输出3在指定范围内搜索,返回相对整体列表的位置
输出
5
10

jcpython2 发表于 2022-10-12 18:51:52

简单滴滴 发表于 2022-10-12 11:45
看一下,这种思路,获取最小值,然后删除,再添加到前面

是的,有内置函数这事我知道,主要是想用最基础的操作把效果实现出来,因为我基础比较差,多磨磨

jackz007 发表于 2022-10-12 18:59:51

jcpython2 发表于 2022-10-12 18:51
老哥你的提点我又改进了下,并且做了笔记,不要怕我白吃你们的回复




    ok,也提醒到我了。
页: [1]
查看完整版本: 我这个列表循环从小排序,逻辑错在那里了?