相关疑难解决方法(0)

如何从列表列表中制作一个平面列表?

我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.

我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.

l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)

错误信息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud)

python list flatten multidimensional-array

2950
推荐指数
29
解决办法
184万
查看次数

Quicksort:选择枢轴

实现Quicksort时,您需要做的一件事就是选择一个数据透视表.但是当我看下面的伪代码时,我不知道应该如何选择枢轴.列表的第一个要素?别的什么?

 function quicksort(array)
     var list less, greater
     if length(array) ? 1  
         return array  
     select and remove a pivot value pivot from array
     for each x in array
         if x ? pivot then append x to less
         else append x to greater
     return concatenate(quicksort(less), pivot, quicksort(greater))
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我掌握选择枢轴的概念,以及不同的场景是否需要不同的策略.

sorting algorithm pseudocode quicksort

106
推荐指数
5
解决办法
12万
查看次数

Python Quicksort运行时错误:cmp中超出最大递归深度

我正在编写一个程序,它将读取包含5,163个名称的文本文件.(文字文件可以在这里看到)

然后我想将名称存储到名为"names"的列表中,之后,我根据名称包含的字母数量对列表进行排序,较短的名称位于列表的开头,较长的名称位于结尾.

我使用quicksort对列表进行排序,但是当我运行它时,它会显示以下错误:

C:\Python27\python.exe C:/Users/Lenovo/Desktop/Anagrams/Main.py
Traceback (most recent call last):
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 25, in <module>
    names = quicksort(names)
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
    lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
    lesser = quicksort([x …
Run Code Online (Sandbox Code Playgroud)

python recursion runtime-error quicksort

15
推荐指数
2
解决办法
3万
查看次数

了解quicksort

我很难理解quicksort,大多数演示和解释都忽略了实际发生的事情(例如http://me.dt.in.th/page/Quicksort/).

维基百科说:

从数组中选择一个称为pivot的元素.分区:对数组进行重新排序,使得值小于枢轴的所有元素都在枢轴之前,而所有值大于枢轴的元素都在它之后(相等的值可以是任意一种).在此分区之后,枢轴处于其最终位置.这称为分区操作.递归地将上述步骤应用于具有较小值的元素的子数组,并分别应用于具有较大值的元素的子数组.

如何使用9,1,7,8,8的数组,例如以7为枢轴?9需要移动到枢轴的右侧,所有快速排序实现都是现场操作,所以我们不能在8,8之后添加它,所以唯一的选择是将9与7交换.

现在阵列是7,1,9,8,8.quicksort背后的想法是,现在我们必须递归地将部件分类到枢轴的左侧和右侧.枢轴现在位于数组的位置0,这意味着没有左侧部分,因此我们只能对正确的部分进行排序.这是没有用的7> 1所以枢轴最终在错误的地方.

在这个图像4是枢轴,那么为什么5几乎一直向左?它大于4!经过大量的交换后,它最终被排序,但我不明白这是怎么回事.

https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Quicksort-diagram.svg/400px-Quicksort-diagram.svg.png

sorting algorithm quicksort

9
推荐指数
1
解决办法
7097
查看次数

对整数列表进行排序的递归函数

我想定义一个递归函数,可以对任何整数列表进行排序:

def sort_l(l):
    if l==[]:
        return []
    else:
        if len(l)==1:
            return [l[-1]]
        elif l[0]<l[1]:
            return [l[0]]+sort_l(l[1:])
        else:
            return sort_l(l[1:])+[l[0]]
Run Code Online (Sandbox Code Playgroud)

在列表 [3, 1, 2,4,7,5,6,9,8] 上调用这个函数应该给我:

[1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

但我得到:

print(sort_l([3, 1, 2,4,7,5,6,9,8]))--> [1, 2, 4, 5, 6, 8, 9, 7, 3]
Run Code Online (Sandbox Code Playgroud)

请帮我解决问题,实际代码将不胜感激。谢谢!

python recursion

-3
推荐指数
1
解决办法
2万
查看次数