【问题标题】:How do I sort the list by running thorough every element?如何通过彻底运行每个元素对列表进行排序?
【发布时间】:2021-10-19 10:38:15
【问题描述】:

根据图像,我的代码应该运行 'k' 12 次,即使列表已经在第 7 步排序。但是,我的代码只运行了 6 次来实现排序列表。我怎样才能让它根据图像运行 12 次?

另外,我必须计算排序“k”所需的步骤数,所以我使用了 enumerate,但输出为 0 0 0 1 1 2。我需要它来给我输出 12。我是不是做错了什么?

    def sorting_function(k):
        for index, i in enumerate(range(len(k))):
            for num in range(len(k) - 1):
                if k[num] > k[num+1]:
                    k[num], k[num+1] = k[num+1], k[num]
                    print(index)

    k = [4, 3, 2, 1]
    sorting_function(k)
    print(k)

【问题讨论】:

  • 这是哪种排序算法?冒泡排序?
  • 你似乎已经发布了关于你应该做什么的更大解释的最后一段。
  • @jarmod 是的,我使用了冒泡排序

标签: python python-3.x sorting user-defined-functions enumerate


【解决方案1】:

您的行 print(index) 是缩进的,这意味着它仅在要交换值时打印。

循环迭代 12 次,但不需要在每个循环上交换值。

我相信它应该像这样工作。

def sorting_function(k):
    for index, i in enumerate(range(len(k))):
        for num in range(len(k) - 1):
            if k[num] > k[num+1]:
                k[num], k[num+1] = k[num+1], k[num]
            print(index)

k = [4, 3, 2, 1]
sorting_function(k)
print(k)

如果您想要输出“12”,请创建一个计数器变量并在每个循环中递增它,然后在print(k) 之后的末尾打印它。

编辑:

您可以使用计数器来跟踪内部循环运行的总次数,而不是使用枚举:

def sorting_function(k):
  counter = 0
  for i in range(len(k)):
      for num in range(len(k) - 1):
          if k[num] > k[num+1]:
              k[num], k[num+1] = k[num+1], k[num]
          counter=counter+1
          print(counter)

k = [4, 3, 2, 1]
sorting_function(k)
print(k)

【讨论】:

  • 那么我不应该使用枚举吗?
  • Enumerate目前只计算外循环运行的次数,需要计算内循环。 enumerate 的问题是它不会跟踪运行内循环的总次数,因为它会在每次外循环运行时重置计数器。
  • 哦,我明白了!多谢!你是一个很大的帮助:)
  • 我在答案中添加了一个带有计数器的示例。希望这会有所帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2023-04-05
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多