带yield的递归函数不返回任何内容

2023-12-15

我正在尝试创建一个用于排列目的的生成器。我知道在 Python 中还有其他方法可以做到这一点,但这是为了别的事情。不幸的是,我无法产生这些值。你能帮我吗?

def perm(s,p=0,ii=0):
    l=len(s)
    s=list(s)
    if(l==1):       
        print ''.join(s)
    elif((l-p)==2):
        yield ''.join(s)
        yield ''.join([''.join(s[:-2]),s[-1],s[-2]])
    else:
        for i in range(p,l):
            tmp=s[p]
            s[p]=s[i]
            s[i]=tmp        
            perm(s,p+1,ii)

你的线路perm(s,p+1,ii)实际上什么也没做:就像打字一样

>>> perm("fred")
<generator object perm at 0xb72b9cd4>

但是,如果您从该调用中屈服,即

        for subperm in perm(s, p+1, ii):
            yield subperm

然后你会得到

>>> list(perm("abc"))
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
>>> list(perm("abcd"))
['abcd', 'abdc', 'acbd', 'acdb', 'adbc', 'adcb', 'bacd', 'badc', 'bcad', 'bcda', 'bdac', 'bdca', 'cabd', 'cadb', 'cbad', 'cbda', 'cdab', 'cdba', 'dabc', 'dacb', 'dbac', 'dbca', 'dcab', 'dcba']

>>> len(_)
24
>>> len(set(perm("abcd")))
24

看起来不错。除此之外我还没有测试过代码。

顺便说一句,你可以交换s[i] and s[p] with s[i], s[p] = s[p], s[i];不需要tmp多变的。

PS:现在你不处理单字符的情况。

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

带yield的递归函数不返回任何内容 的相关文章

随机推荐

  • 具有来自多列数据帧的值计数的单列

    我想用 pandas 对多列的频率进行求和 列的数量可以在 2 15 列之间变化 以下是仅 3 列的示例 code1 code2 code3 27 5 56 534 27 78 27 312 55 89 312 27 我希望得到以下结果 c
  • C++0x 中未调用移动构造函数

    请在下面找到我的代码 我曾经调用移动构造函数 代码受其他站点启发 并让我知道它有什么问题 我正在使用 GCC 4 5 3 include
  • 递归字符串反转函数

    出于好奇编写了一个递归字符串反转函数 但是那里的 XOR 有点问题 这个函数的重点是不使用迭代器 这就是它是递归函数的原因 这不是作业 只是好奇心 private static char ReverseNL char arr int ind
  • IOError:[Errno 24]打开的文件太多:

    我有一个巨大的文件 我正在将其写入大约 450 个文件 我收到错误为too many files open 我在网上搜索并找到了一些解决方案 但没有帮助 import resource resource setrlimit resource
  • 在 ie8 及以下版本上使用 twitter bootstrap 的 Respond.js

    我正在使用 twitter bootstrap 实现一个响应式网站 但在 iexplorer 8 及更低版本上无法使用媒体查询 我为 try respond js 创建了一个简单的示例 但媒体查询在 iexplorer 7 8 上仍然无法工
  • libvirtError:XML 错误:预期单播 mac 地址,发现多播

    我正在通过 ansible 设置 KVM 自动化 并且我有一个虚拟机一直给我这个错误 libvirtError XML 错误 预期的单播 mac 地址 发现多播 53 54 00 b4 ad 81 我不认为这是一个可靠的问题 因为其他几个虚
  • 图像尺寸突然缩小

    我只是复制图像并将其保存到当前目录中的另一个临时文件夹中 没有任何修改 但图像大小以某种方式减小了 为什么 from PIL import Image import os image path Users moomoochen Deskto
  • 两个数相除总是等于零?

    在我的 Xna 游戏中 我试图将我的游戏场缩放到它运行的屏幕上 为此 我使用比例来查找实际窗口相对于我的游戏区域缩放的百分比 为此 我将实际宽度除以虚拟宽度 float percent realViewport Width this vie
  • 如何从joomla模块中的ajax获取数据库值?

    我正在创建一个模块 我想从 ajax 获取数据库值 任何人有这个问题的解决方案或任何例子请帮助我 谁能给我一个正确的方法来解决这个问题 这是我的jquery code jQuery type bind click function var
  • 使用 std::tr1::function (或 boost::function)创建多播事件

    我正在尝试使用 TR1 的功能创建类似 C 的多播委托和事件 或者 Boost 因为 boost function 大部分 与 std tr1 function 相同 作为概念证明 我尝试了以下方法 template
  • wxPython 带有面板的框架的最小尺寸

    wxpython 2 8 11 0 python 2 7 如果我放一些Sizer一些控件直接进入Frame like import wx app wx App frm wx Frame None title title sizer wx B
  • 如何检查一个数组中的任何变量是否在另一个数组中

    我正在使用 MatLab 开发一个程序 该程序计算数字的幂 将它们加在一起 然后查看第一组数字 数字的幂 是否等于任何相加的数字的幂 我试图检查第一个数组中的每个值 但是 我得到如下输出 m 1 128 2187 16384 78125 2
  • Netsuite suitetalk 交易电子邮件,带有 pdf 附件介绍文本

    我使用 php 工具包和 netsuite 来添加带有 toBeEmailed 选项的销售订单 并且它登录的 api 用户具有首选项 交易电子邮件附件格式 gt PDF 这会将订单摘要制作为 pdf 并附加到电子邮件中并作为通知发送 我查看
  • Windows MessageBox 忽略 WM_CLOSE

    我们有一个遗留的 C Windows 应用程序 当发生致命连接错误时 它会通过 MessageBox 调用弹出一个模式窗口 我们的网络工程师可能会同时运行许多这样的应用程序 有时 网络故障会导致这些应用程序处理的连接同时失败 在 Windo
  • 从数组中删除重复项

    您好 我有一个使用此函数从 XML 文件创建的数组 LOCATIONS XML HANDLER creates array holding values of field selected from XML string xml param
  • 是否可以从 android 调用 WSHTTPBINDING?

    private static final String SOAP ACTION http tempuri org IService1 HelloTest private static final String METHOD NAME Hel
  • 如何使用 C# 禁用文本框上的复制、粘贴和删除功能

    有人可以建议如何使用 C 处理 WinForms 中文本框上的剪切 复制和粘贴事件吗 在 WinForms 中 禁用文本框上的剪切 复制和粘贴功能的最简单方法是将 ShortcutsEnabled 属性设置为 false
  • 如何在 MDX 中使用 UNION

    我想要UNION下面MDX询问 对于这两个查询 同一日期范围的度量和维度是不同的 请帮助我摆脱困境 SELECT NON EMPTY Measures Number of es2 ON COLUMNS NON EMPTY Date Year
  • 如何按升序对奇数数组进行排序,但将偶数保留在其位置?

    我只想对奇数进行排序而不移动偶数 例如 当我写 sortArray 5 3 2 8 1 4 预期结果是 1 3 2 8 5 4 我是 JavaScript 新手 在互联网上遇到了一个令我困惑的挑战 我通常不会在互联网上发布请求解决方案 但我
  • 带yield的递归函数不返回任何内容

    我正在尝试创建一个用于排列目的的生成器 我知道在 Python 中还有其他方法可以做到这一点 但这是为了别的事情 不幸的是 我无法产生这些值 你能帮我吗 def perm s p 0 ii 0 l len s s list s if l 1