【问题标题】:Bubble sort in Python, what are these arguments for?Python中的冒泡排序,这些参数是什么?
【发布时间】:2014-04-02 16:54:56
【问题描述】:
def bbsort(list1):
    for passnum in range(len(list1)-1,0,-1):
        for i in range (passnum):
            if list1[i]>list1[i+1]:
                temp =list1[i]
                list1[i] = list1[i+1]
                list1[i+1] = temp

这是冒泡排序的代码,但-1,0,-1while 条件中有什么用?

【问题讨论】:

  • 这不是while 条件,而是for 循环。

标签: python sorting bubble-sort


【解决方案1】:

您正在查看range() function 的参数;数字设置范围从列表长度开始,减一,然后逐步下降到 1(结束点不包括在范围内)。

所以有3个参数,第一个是len(list1) - 1,第二个是0,第三个是-1

假设列表长度为 5,那么range(5 - 1, 0, -1) 将生成一个包含 4、3、2 和 1 的列表:

>>> list(range(4, 0, -1))
[4, 3, 2, 1]

for 循环遍历这些值:

>>> for i in range(4, 0, -1):
...     print(i)
... 
4
3
2
1

for 循环将这些数字分配给passnum,下一个嵌套循环使用它来创建一个新的range()。第一次,内部范围将从0len(list1) - 1(不包括),下一次从0len(list1) - 2,等等,直到最后一次,当它从0 运行到1,始终不包括停止索引。对于长度为 5 的列表,这意味着内部循环首先将 0、1、2、3 分配给 i,然后是 0、1、2,然后是 0、1,然后是 0。

代码缺少使用 Python 序列赋值交换元素的机会:

def bbsort(list1):
    for passnum in range(len(list1) - 1, 0, -1):
        for i in range (passnum):
            if list1[i] > list1[i + 1]:
                list1[i], list1[i + 1] = list1[i + 1], list[i]

【讨论】:

    【解决方案2】:

    第一个 -1 从输入列表的长度中减去 1,因为索引是从 0 开始的,而不是 1。0 是开始编号(仅需要获取下一个参数)。第二个 -1 是告诉它在范围内向后移动的步骤。

    示例: range(5, 2, -1) 是 [5, 4, 3]

    等于范围(开始、停止、步进)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多