【问题标题】:Why is print not printing my array sorted为什么打印不打印我的数组排序
【发布时间】:2020-08-14 01:58:40
【问题描述】:

这是我的原始数组:a = [0, 4, 7, 8, 1, 3, 5, 2, 6]

这就是它打印的内容:[0, 4, 7, 0, 0, 0, 5, 0, 0]

for i in a:
    pos = i
    min = a[i]
    for j in a:
        if a[j] < min:
            min = a[j]
            pos = j
        a[pos] = a[i]
        a[i] = min
print(a)

【问题讨论】:

  • 您将列表值与列表索引混淆了,这是唯一可能的,因为所有值都恰好是列表的有效索引。如果您确定这不是真的(例如,通过向列表中的每个值添加 10),那么任何此类混淆都会在问题发生时导致异常,而不是让无意义的结果持续到最后的代码。

标签: python arrays sorting for-loop


【解决方案1】:

作为@'Lee Jun Wei',你的算法看起来不正确。但可能还有其他一些事情需要指出。

这两行看起来不对。

for i in a:
for j in a:

i 和 j 采用 a 元素的值而不是索引值。我想你的意思是

for i in range(len(a)):

你得到零的原因是因为 min 被初始化为 0。请注意,它为零不是因为索引,而是因为 0 是数组中的第一个值。一旦 min 为零,这是该行数组中的最小值

if a[j] < min:

永远不可能是真的。所以这一行

a[i] = min

将所有内容设置为零。但是,每个元素都不为零,因为 a[i] 不是顺序的。它会跳来跳去,因为 i 是元素值而不是索引。

【讨论】:

    【解决方案2】:

    嗯,你想实现什么排序算法?如果你想要做的是冒泡排序,它应该是这样的:

    a = [0, 4, 7, 8, 1, 3, 5, 2, 6]
    
    n=len(a)
    
    for i in range(n):
        for j in range(n-1):
            if a[j+1] < a[j]:
                min = a[j+1]
                a[j+1] = a[j]
                a[j] = min
    
    print(a)
    

    【讨论】:

    • 我打算进行选择排序,但我错过了 n = leng 部分
    【解决方案3】:

    你没有解释你到底想要什么,但是如果你想对你的数组进行排序,例如,从 45312 到 12345 ...

    print(sorted(mylist))
    
    a=sorted(mylist)# store in a variable 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多