使用递归查找列表中第二小的数字

2024-02-27

我知道有人就这个主题提出了问题,但没有一个答案对我有帮助。我不需要帮助实现代码,我只需要帮助对此递归过程进行排序。

我最初想在每个级别递归地返回一个元组并进行比较以找到第二小的值。但这不起作用,因为我希望我的函数最终只返回 1 个值 - 第二个最小值。

我将如何进行这个问题的递归过程?谢谢你!

编辑:抱歉没有包含足够的详细信息,所以就到这里。

函数应按如下方式工作:

>>> sm([1,3,2,1,3,2])
>>> 2

第二次编辑:抱歉耽搁了,一直忙到现在,终于可以坐下来把我想到的写进代码了。它按预期工作,但老实说,我认为这是一种非常糟糕且低效的递归方式,因为你可能会说我对这个概念很陌生。

使用下面的伪代码重新表述我原来的问题:是否可以执行我在这里所做的操作,但不将其包装在第二个函数中?也就是说,是否有可能有一个函数仅递归调用其自身,并返回 1 个数字(第二小的数字)?

def second_smallest(list):
    def sm(list):
        if base case(len of list == 2):
            return ordered list [2nd smallest, smallest]
        else:
            *recursive call here*
            compare list[0] with returned ordered list
            eg: [3, [5,2]]
            re-arrange, and return a new ordered list
            [3,2]
    return sm(list)[0]

您可以编写递归函数来接受 3 个参数:迄今为止遇到的第一个和第二个最小值,以及列表的其余部分(您尚未检查)。

然后,通过将列表参数的第一个元素与迄今为止最小的两个元素进行比较,您可以选择 3 个中的哪 2 个作为参数传递到下一个递归。

您需要将此递归函数包装在一个表示函数中,该函数设置并调用递归函数,同时处理元素少于 2 个列表等情况。

def recurse(min1, min2, list):
    if len(list)==0:
        return min2
    first, rest = list[0], list[1:]
    if first < min1:
        return recurse(first, min1, rest)
    if first < min2:
        return recurse(min1, first, rest)
    return recurse(min1, min2, rest)

def second_smallest(list):
    if len(list) < 2:
        raise ValueError("too few elements to find second_smallest")
    a, b, rest = list[0], list[1], list[2:]
    if b < a:
        return recurse(b, a, rest)
    else:
        return recurse(a, b, rest)

这种解决方案并不是特别Pythonic——它更像是一种函数式编程风格。

最后,您可以传递列表前面的参数,并组合这两个函数来获得您正在寻找的解决方案:

def second_smallest(list):
    if len(list) < 2:
        raise ValueError("too few elements to find second_smallest")
    a, b = list[0], list[1]
    a, b = min(a,b), max(a,b)
    if len(list) == 2:
        return b
    c, rest = list[2], list[3:]
    if c < a:
        return second_smallest([c,a]+rest)
    if c < b:
        return second_smallest([a,c]+rest)
    return second_smallest([a,b]+rest)

请注意,此函数做了一些多余的工作,因为它无法知道它是否首先被调用,或者是否递归地调用自身。还,+创建一个新列表,因此对于大小为 n 的列表,此代码可能需要 O(n^2) 时间。

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

使用递归查找列表中第二小的数字 的相关文章

  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 垂直线 axvline 在 matplotlib 的 loglog 图中绘制位于错误位置的线

    我在使用 axvline 在 matplotlib 的 loglog 图中绘制垂直线时遇到问题 第一个问题是垂直线没有出现在正确的位置 第二个问题 可能相关的是 当我放大或平移绘图时 垂直线只是保持在原位 并且没有通过平移 滑动绘图 或放大
  • 在一张图中同时绘制两个截面强度

    我有一个形状数组 512 512 看起来像 行 x 列 y 密度 z 数组的数量 0 012825 0 020408 0 022976 0 015938 0 02165 0 024357 0 036332 0 031904 0 025462
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • 为什么 array_merge_recursive 不是递归的?

    我最近在我的应用程序中发现了一个由意外行为引起的错误array merge recursive 让我们看一下这个简单的例子 array1 1 gt 1 gt 100 2 gt 200 2 gt 3 gt 1000 3 gt 1 gt 500
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • Python3模拟用另一个函数替换函数

    如何使用 python 中的另一个函数来模拟一个函数 该函数也将提供一个模拟对象 我有类似以下操作的代码 def foo arg1 arg2 r bar arg1 does interesting things 我想替换的实现bar函数 让
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • keras 预测内存交换无限期增加

    我使用keras实现了一个分类程序 我有一大组图像 我想使用 for 循环来预测每个图像 然而 每次计算新图像时 交换内存都会增加 我尝试删除预测函数内部的所有变量 并且我确信该函数内部存在问题 但内存仍然增加 for img in ima
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • 散景中的时间序列流

    我想在散景中绘制实时时间序列 我只想在每次更新时绘制新的数据点 我怎样才能做到这一点 散景网站上有一个动画情节的示例 但它每次都需要重新绘制整个图片 另外 我正在寻找一个简单的示例 我可以在其中逐点绘制时间序列的实时绘图 散景效果0 11
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • 如何在包更新之间保留数据文件?

    我正在使用data files的论证setuptools setup 将配置文件安装到 etc和用户主目录 但是更新包pip install
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN
  • 如何计算某物是否位于某人的视野中

    我有一个对象 它在 2D 空间中具有位置和速度 两者都由向量表示 对象的视野每侧均为 135 度 它看起来与移动的方向相同 速度矢量 我有一些对象 其在 2D 空间中的位置由向量表示 在图中 蓝色背景上的对象是可见的 红色背景上的对象对主体
  • 如何获取所有Python标准库模块的列表?

    我想要类似的东西sys builtin module names标准库除外 其他不起作用的事情 sys modules 只显示已经加载的模块 sys prefix 包含非标准库模块并且似乎无法在 virtualenv 内工作的路径 我想要这
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo

随机推荐

  • 点之间的欧几里得距离

    我在 numpy 中有一个点数组 points rand dim n points 我想 计算某个点与所有其他点之间的所有 l2 范数 欧几里得距离 计算所有成对距离 最好都是 numpy 而没有 for 一个人怎样才能做到呢 如果您愿意使
  • PropertyPlaceholderConfigurer 从 XML 文件读取(Apache Commons 配置)

    是否可以配置 Spring PropertyPlaceholderConfigurer 来读取 properties xml 通过 Apache Commons 配置 我在帮助下找到了解决方案seanizer https stackover
  • 如何使用nodejs禁用Chrome的会话恢复警告?

    如何通过 NodeJS 在 Windows 中重新启动 Chromium Google Chrome 信息亭模式 以便它在重新启动时正常启动浏览器 就像普通人使用它一样 当我每次重新启动 Chromium Google chrome 时使用
  • 图像周围出现尴尬的线条

    可能最容易用图像来解释我想要什么 当我浮动图像时 文本围绕它运行 这很棒 但是 根据文本量和图像大小 我经常会遇到这些尴尬的情况 在这种情况下 尴尬的文本在图像旁边的列中看起来会更好 I could根据有多少尴尬的文本为图像添加更多的底部边
  • 何时选择在 SSIS 的 Lookup 组件中进行缓存

    在SSIS查找中有3种类型的缓存 完整 部分和无缓存 在我们的解决方案中 它一直使用默认的 完整 是否有任何特定的场景 可以使用部分缓存 无缓存 在我们的解决方案中 锁定表总是很小 例如 我们一直在查看小表来获取类型或获取描述 这可能是它在
  • 按最新排序,但按另一个 ID 列放在一起

    我正在尝试进行一些排序并保持在一起 不是真正的分组 工作 在我的示例数据中 我想将 DealerID 保留在一起 按 IsPrimaryDealer DESC 排序 但按最新条目显示经销商组 好吧 也许是分组 结果集 2 是最接近的 但 G
  • 为ListView自定义CheckedTextView

    据我所知 ListView嵌入了CheckedTextView来形成列表 但是每个CheckedTextView只有一个TextView和一个CheckBox 我想要做的是将一些 TextView 添加到 CheckedTextView 中
  • 使用 PostgreSQL 在 WITH(CTE) 中创建

    我正在尝试使用 PostgreSQL 中的函数在WITH 中创建临时表 Example with mm as select from test create table xyz as select from mm Note 在创建附近出现错
  • 在 Django 模板中执行 Javascript 和 css

    我正在 Django 应用程序中通过 Weasyprint 将 HTML 导出为 PDF 我注意到 如果我将模板 html 发送到前端并将该 html 返回到后端以将其导出为 pdf 它会完美打印 但如果我直接将模板 html 发送到 We
  • 如何在 C++ 中的 while 循环中存储先前的迭代?

    我看到有一个类似标题的答案 但内容对我来说太密集了 因为我不太了解 C 我对编程非常陌生 我不知道如何在 while 循环中存储先前的迭代 我正在尝试使用 while 循环将用户文本写入文件 并以两个结束输入 n人物 这就是我的问题所在 因
  • 当我添加到数组时,svelte 列表不会更新

    我刚刚开始使用 svelte 所以 这可能是一个菜鸟问题 我有一个列表 我可以从数组中删除项目 并且列表 each 更新没有问题 但是如果我将一个项目添加到数组中 列表不会重新绘制 直到我删除另一个项目 https svelte dev r
  • 如何使用客户端证书在 Web API 中进行身份验证和授权

    我尝试使用客户端证书对使用 Web API 的设备进行身份验证和授权 并开发了一个简单的概念证明来解决潜在解决方案的问题 我遇到了 Web 应用程序未收到客户端证书的问题 许多人报告了这个问题 包括在这个问答中 https stackove
  • 读取 iPhone 运营商的信号强度

    这可能吗 如果没有的话 我真的很惊讶这还没有通过 API 开放 Apple 不允许使用低级网络 wifi 蜂窝 API 有趣的是 在之前的一段时间内 应用程序商店中有些应用程序使用了私有 api 例如一些 WIFI 扫描仪 至少据我所知 现
  • Python 中的线程

    关于如何在 Python 中使用线程的一般教程或好的资源 何时使用线程 它们如何有效以及线程的一些一般背景 特定于 Python 当您希望同时运行两个事物 或者希望某些事物在后台运行而不减慢主进程时 应该使用线程 我的建议是仅在必要时才使用
  • 将每个列表值映射到其相应的百分位

    我想创建一个函数 它接受 排序的 列表作为其参数 并输出一个包含每个元素相应百分位数的列表 例如 fn 1 2 3 4 17 回报 0 0 0 25 0 50 0 75 1 00 任何人都可以请 帮我改正下面的代码吗 或者 是否提供了比我的
  • 仅使用移动窗口中的先前值的线性回归

    我有一个巨大的数据集 想要在 60 个窗口上执行滚动线性回归 但是 我希望线性回归只考虑 60 个先前的值 我的 Dataframe DF 包含以下列 Date Company Y X1 X2 01 01 2015 Mill 0 13 1
  • 在工具栏子元素顶部添加后退按钮

    我有以下布局文件 如何在下面的布局中的工具栏的 Imageview 子项顶部 或覆盖在 z index 上 添加后退按钮 箭头
  • AppEngine 延迟库中的 PermanentTaskFailure

    我正在使用 App Engine 和延迟库 但每隔一段时间我的任务就会失败并出现以下错误 Permanent failure attempting to execute task Traceback most recent call las
  • 如何将 Iplimage 放在图片框上?

    有没有办法在图片框中显示 IplImage 我不想保存图像并将其重新加载到图片框中 因为我需要我的程序速度快 我在 C 中使用 opencv 2 1 我正在使用 Visual Studio 2008 谢谢 这已经讨论过了here http
  • 使用递归查找列表中第二小的数字

    我知道有人就这个主题提出了问题 但没有一个答案对我有帮助 我不需要帮助实现代码 我只需要帮助对此递归过程进行排序 我最初想在每个级别递归地返回一个元组并进行比较以找到第二小的值 但这不起作用 因为我希望我的函数最终只返回 1 个值 第二个最