Python 快速排序运行时错误:cmp 中超出最大递归深度

2023-12-31

我正在编写一个程序,它将读取包含 5,163 个姓名的文本文件。 (文本文件可见here http://pastebin.com/BAKTJKy6)

然后我想将名称存储到一个名为“名称”的列表中,之后,我根据名称包含的字母数量对列表进行排序,较短的名称位于列表的开头,较长的名称位于列表的末尾。

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

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 for x in list[1:] if lessThan(x, pivot)])
# [.... many lines elided ...]
  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 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 3, in quicksort
    if list == []:
RuntimeError: maximum recursion depth exceeded in cmp

完整的追溯可用作为馅饼 http://pastebin.com/cC671BTd.

我已经测试了快速排序函数,它适用于普通列表(例如:list = ['Alice','Bob,'Carl','Derp']),但如果我尝试对“名称”进行排序,它就不起作用

这是我的代码

def quicksort(list):
    """Quicksort using list comprehensions"""
    if list == []:
        return []
    else:
        pivot = list[0]
        lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
        greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
        return lesser + [pivot] + greater

def lessThan(a, b):
    return len(a) < len(b)

#'''
input = open('Names.txt', 'r')
output = open('Names Arranged By Length.txt', 'w')

names = []

for line in input:
    line = line.translate(None, '\n')
    names.append(line)


names = quicksort(names)

for i in names:
    print i
    output.write(i)
    output.write('\n')

print 'Count: ', len(names)


input.close()
output.close()
#'''

我的代码有什么问题以及如何修复它?


您只是达到了递归限制。对于 Python 有限的递归功能来说,您的名称列表太大了。否则你的快速排序就可以正常工作。

You could通过将限制设置得更高来提高递归限制sys.setrecursionlimit() https://docs.python.org/2/library/sys.html#sys.setrecursionlimit。您可以将其设置得较高,但您需要自行承担风险。

更好的选择是使用内置的 Python 排序;这TimSort算法 http://en.wikipedia.org/wiki/Timsort优越得多并且不会达到递归限制:

names = sorted(names, key=len)

这将按名称的长度对名称进行排序,首先是最短的名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 快速排序运行时错误:cmp 中超出最大递归深度 的相关文章

随机推荐

  • 如何在 .send_keys() 中的字符之间进行延迟

    我正在自动化一个在线应用程序 并试图使每个 send keys 更加真实 而不是仅仅用 猛击文本字段 电子邮件受保护 cdn cgi l email protection 立即 我喜欢击键之间有一点延迟 这样看起来就像是人在打字 而不是机器
  • 将字符串转换为数组或对象

    是否可以将此字符串转换为数组或对象 它不是有效的 stringify JSON 数据 不知道如何解决这个问题 subject Test Comment message Test Message 预先感谢 像这样 JSON parse sub
  • 从输入框获取img src到div中

    我这个小项目背后的想法是让用户输入 img 的 URL 当用户点击按钮时 img 应该被插入到新的 div 页面内 我尝试在 stackoverflow 上寻找几个小时 但老实说 我不明白如何对我自己的代码使用其他答案 大部分 CSS 和
  • 值和引用类型

    我知道JavaScript中有6种数据类型 JavaScript 中的 引用 类型是什么 JavaScript 中的 值 数据类型是什么 有人可以按这两个类别列出它们吗 undefined null number string boolea
  • PHP 扩展未通过 httpd 找到,但可以从 CLI 找到,具有相同的 php.ini

    我想在安装 PHP 7 1 和 Apache 2 4 后在我的 Windows 7 上使用它的一些扩展 我编写了一个小测试脚本index php调用给定扩展的某些功能
  • .htaccess php 重写

    我在将 authentication view profile user username 重写为 myurl com profil username 时遇到问题 现在我的 htaccess 文件是 RewriteEngine On Rew
  • Outlook VBA Mailitem 属性 SenderEmailAddress 未正确返回地址

    因此 我在 access 中有一个程序 可以让用户选择要导入到表中的 Outlook 文件夹 然后可以从组合框中选择并传输到表单以供使用 但是 我对返回的值之一有疑问 SenderEmailAddress 实际上并没有给我一个电子邮件地址
  • Android 11 (R) 查询 ACTION_IMAGE_CAPTURE 意图时返回空列表

    设备 模拟器 Pixel 3a Android 11 Code final List
  • AFNetworking - 如何为一个键指定多个值

    我正在尝试使用 AFHTTPClient 方法 postPath 将一个参数键的多个值传递给 HTTP 请求 但是 参数变量是 NSDictionary 因此我无法为我的键 email 设置多个值 我尝试将电子邮件值作为逗号分隔的字符串发送
  • 如何从 PDF 文件中提取页面? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 Perl 脚本可以从 PDF 文件获取页面并将其转换为另一个 PDF 文件 您要求 Perl 所以这是一个很好的解决方案CAM
  • 什么时候您更愿意声明异常而不是在 Java 中处理异常?

    我知道如果我们希望调用方法处理该异常 则可以为该方法声明异常 如果封闭方法抛出 IOException 这甚至允许我们执行诸如写入 OutputStream 之类的操作 而无需将代码包装在 try catch 块中 我的问题是 任何人都可以
  • 删除样式标签上的样式属性

    我有一个STRING with html内容 我想删除style属性上style使用 javascript 正则表达式标记 如下所示 before
  • YQL 天气结果一半时间为空

    雅虎数据有时无法获取数据 query results is null or not an object 我在 Chrome 55 0 2883 87 和 fierfox 50 1 0 上发生了这种情况 这是我正在使用的 YQL 以及回应 q
  • MongoDB:地理空间索引数组的格式不正确

    在尝试设置使用 MongoDB 上的地理空间索引时 我遇到了错误消息 指出位置数组的格式不正确 这是我的收藏 测试 id ObjectId 4f037ac176d6fdab5b00000a CorporateId XYZ12345 Plac
  • React Native WebView 应用程序在按后退按钮时不退出

    设置按下后退按钮后返回功能后 React Native WebView 应用程序不会在按后退按钮时退出 我希望当 webview 不在主页上时按后退按钮返回功能 当 webview 位于主页上时然后退出应用程序 export default
  • 在Javascript中,如何有条件地更新对象的属性?

    我见过这个帖子 https stackoverflow com questions 11704267 in javascript how to conditionally add a member to an object想知道是否有一种方
  • 更改子类java中的类变量类型

    我有一个名为 模块 的课程 public abstract class Module protected Map
  • 轨道 3 饼干

    我有一个简单的应用程序 用户可以在文本字段中输入内容以获得各种结果 我想要一个功能 如果用户输入某些内容然后关闭浏览器选项卡 那么下次他们来时 我可以向他们显示他们之前 最近的搜索 即使他们关闭整个浏览器并再次打开它 这种情况也会持续存在
  • Python-删除字符串的前两行

    我在这里搜索了许多关于删除字符串前两行的线程 但我似乎无法让它与我尝试过的每个解决方案一起使用 这是我的字符串的样子 version 1 00 6992 4 32063 9 1198 106 59 0 00064 0 99993 0 012
  • Python 快速排序运行时错误:cmp 中超出最大递归深度

    我正在编写一个程序 它将读取包含 5 163 个姓名的文本文件 文本文件可见here http pastebin com BAKTJKy6 然后我想将名称存储到一个名为 名称 的列表中 之后 我根据名称包含的字母数量对列表进行排序 较短的名