Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python语法/理解_Python_Algorithm_Sorting_Counting - Fatal编程技术网

Python语法/理解

Python语法/理解,python,algorithm,sorting,counting,Python,Algorithm,Sorting,Counting,因此,在上面的代码中,我不理解我用“困惑”标记的那一行,在最后一行之前有4行。 可能是因为我对python不熟悉,或者只是太笨了 在第一个案例中发生了什么?当范围为[]时。。。“对于空数组范围内的每个c…” 我也没有在下面的行中得到array[i]=a。如果a是计数数组中可能为零的第一个元素,如何添加它…?真的很困惑 干杯 range将为您提供一个包含指定起始值和结束值的列表 def counting_sort(array, maxval): """in-place counting s

因此,在上面的代码中,我不理解我用“困惑”标记的那一行,在最后一行之前有4行。 可能是因为我对python不熟悉,或者只是太笨了

  • 在第一个案例中发生了什么?当范围为[]时。。。“对于空数组范围内的每个c…”
  • 我也没有在下面的行中得到
    array[i]=a
    。如果a是计数数组中可能为零的第一个元素,如何添加它…?真的很困惑
  • 干杯

  • range
    将为您提供一个包含指定起始值和结束值的列表

    def counting_sort(array, maxval):
        """in-place counting sort"""
        m = maxval + 1
        count = [0] * m               # init with zeros
        for a in array:
            count[a] += 1             # count occurences
        i = 0
        for a in range(m):            # emit
            for c in range(count[a]): # - emit 'count[a]' copies of 'a' #CONFUSED
                array[i] = a
                i += 1
        return array
    
    print counting_sort( [1, 4, 7, 2, 1, 3, 2, 1, 4, 2, 3, 2, 1], 7 )
    #            prints: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 7]
    
    将打印

    print range(5) 
    
    当你说,
    range(m)
    range(count[a])
    时,它将生成一个列表,直到
    m
    count[a]
    从0开始

  • 关于
    数组[i]=a

    范围(m)
    中,对于每个元素,代码检查
    计数[a]
    。如果
    计数[a]
    为0,则不会执行第二个循环。(
    范围(0)
    将生成一个空列表),因此当
    a
    为0时,将不执行数组[i]=a


  • 显然,您已经计算出
    count[a]
    将为0,因此
    range(count[a])
    将为
    []

    for i in []:
       do_stuff(i)
    
    那么,你要问的是,这是做什么的:

    [0, 1, 2, 3, 4]
    
    答案是它在0元素中的每一个元素上循环,换句话说,它根本不循环,只是什么都不做*

    以下文件对此进行了解释:

    …然后,当项目用尽时(即序列为空时),对迭代器提供的每个项目执行一次套件……循环终止


    这就隐含了你的第二点困惑:

    如果a是计数数组中可能为零的第一个元素,如何添加它

    count[a]
    为0时,您将永远不会进入循环,因此不会出现这种情况



    *如果
    for
    语句有一个
    else
    子句,它确实会运行
    else
    子句。

    我简化了代码的一部分,也许它可以帮助您更好地理解算法的核心。在计算数组中的所有元素后,我们只能使用
    count[]中存储的信息重建排序数组

    for i in []:
       do_stuff(i)