C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移

2024-01-22

我所追求的算法有一个很好的实现here https://stackoverflow.com/questions/39192777/python-split-a-list-into-n-groups-in-all-possible-combinations-of-group-length-a/ (by @懒狗 https://stackoverflow.com/users/6732794/lazy-dog)。然而,我在 C# 中需要这个,并且由于 C# 缺乏yield from也许还有我自己的愚蠢。

这是我目前拥有的:

public static IEnumerable<ArrayList> sorted_k_partitions(int[] seq, int k) {
  var n = seq.Length;
  var groups = new ArrayList(); //a list of lists, currently empty

  IEnumerable<ArrayList> generate_partitions(int i) {
    if (i >= n) {
      // this line was the bug, was not creating a 
      //   deep clone of the list of lists
      // yield return new ArrayList(groups); 
      yield return new ArrayList(groups.ToArray().Select(g => ((List<int>)g).ToList())); 
      // Ugly but that is because we are using ArrayList
      // Using proper List<List<int>> cleans this up significantly
    }
    else {
      if (n - i > k - groups.Count)
        foreach (List<int> group in new ArrayList(groups)) {
          group.Add(seq[i]);
          // yield from generate_partitions(i + 1);
          foreach (var d in generate_partitions(i + 1)) {
            yield return d;
          }
          group.RemoveAt(group.Count - 1);
        }

      if (groups.Count < k) {
        groups.Add(new List<int> {seq[i]});
        foreach (var d in generate_partitions(i + 1)) {
          // things start breaking down here, as this yield return
          //  appears to release flow control and we then get the 
          //  yield return above.  I have debuged this and the python
          //  version and the python version does not do this.  Very hard
          //  to explain considering I don't fully understand it myself
          yield return d;
        }
        groups.RemoveAt(groups.Count - 1);
      }
    }
  }
  return generate_partitions(0);
  // don't worry about the sorting methods in the python 
  //   version, not needed
}

任何人都可以看到任何明显的错误,我确信我对Python缺乏理解yield from协程在这里伤害了我。

编辑:发现错误,在上面添加评论


你在这里有什么行为?

在我看来yield return generate_partitions(i + 1);而不是 foreach 循环应该可以正常工作。它只会使用新值递归调用该函数i+1

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

C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移 的相关文章

  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 在 (i)python 脚本中从 jupyter 内核获取输出

    我想从单个 ipython 会话中打开多个内核 在这些内核上运行代码 然后收集结果 但我不知道如何收集结果 甚至不知道如何查看 stdout stderr 我怎样才能做这些事情呢 到目前为止我所得到的 我已经使用如下代码管理了前两个步骤 打
  • 为图例中的点设置固定大小

    我正在制作一些散点图 我想将图例中的点的大小设置为固定的相等值 现在我有这个 import matplotlib pyplot as plt import numpy as np def rand data return np random
  • 为什么我无法调试动态加载的程序集?

    我正在开发一个 Web API 项目 该项目使用内部模拟框架 允许拦截和修改来自控制器的响应 它使用 MEF 加载包含某些先决条件匹配时执行的代码的程序集 我知道这是正常工作的 因为我可以在响应中看到模拟已被执行 但由于某种原因我无法调试动
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 多线程写入文件

    前几天刚开始使用 python 对多线程的整个概念还很陌生 我在多线程时写入文件时遇到问题 如果我按照常规方式执行此操作 它会不断覆盖正在写入的内容 使用 5 个线程写入文件的正确方法是什么 不降低性能的最佳方法是在所有线程之间使用队列 每
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • 收到的标签值 1 超出了 [0, 1) 的有效范围 - Python、Keras

    我正在使用具有张量流背景的 keras 开发一个简单的 cnn 分类器 def cnnKeras training data training labels test data test labels n dim print Initiat
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • sklearn 中带有词袋和附加情感特征的文本分类器

    我正在尝试构建一个分类器 除了词袋之外 还使用情绪或主题 LDA 结果 等特征 我有一个包含文本和标签的 pandas DataFrame 并且想添加情感值 5 到 5 之间的数字 和 LDA 分析结果 带有句子主题的字符串 我有一个工作词
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中
  • char[length]初始化并处理

    我定义了一个字符数组 char d 6 如果我在以下方面有误 请纠正我 此时没有为变量分配内存d 现在我要初始化它 d aaaaa 这种初始化之后 就不需要释放内存了 它将自动完成 我怎么知道是否char 被初始化了吗 我正在寻找类似的模式
  • 在 python 中使用递归替代 len()

    作为 CS1301 问题的一部分 我正在尝试使用递归编写一个函数 该函数将执行与 len 完全相同的操作 但是 我有两个问题 我正在使用全局变量 但我在课程中还没有学到这一点 cs1301 自动评分器告诉我 我的函数返回 26 而不是 13
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla

随机推荐

  • 使用包含 3001 位的极大整数

    例如 如何使用 1000 1000 的结果进行算术运算 我不认为有一个图书馆可以容纳这个 我最多只能看到 100 个数字 Use an 任意精度算术 http en wikipedia org wiki Arbitrary precisio
  • Cocoa:我已经收到了用户的输入 - 现在怎么办?

    简而言之 我的程序所做的是 它使用 nswindow 由我的 NSWindowController 对象控制 定期执行并获取用户输入 然后继续执行 这是我的 myController mm 它正在调用并显示窗口以接受用户输入 Encrypt
  • firebase $add() .push() .set()

    我正在使用 firebase 和 Angularfire 使用 Firebase Api 进行 CRUD 的方法有很多种 实际上 我仍然不明白使用的具体区别是什么 add 与 firebaseArray push 方法 set 方法 我认为
  • 如何仅使用分区键从 aws Dynamodb 获取数据?

    我正在使用 aws sdk go 库在 Golang 中进行 DynamoDb 连接 我的 DynamoDb 表有一个分区键 DeviceId 字符串 和一个排序键时间 数字 如何编写 GetItemInput 来获取具有特定 Device
  • Autofac 和 WebAPI - 默认构造函数错误

    我有一个 webforms 项目 但正在使用 WebAPI 来提供 Web 服务 我正在尝试实施 Autofac 我正进入 状态 MyController does not have a default constructor 根据 Aut
  • 利用 IIS 中的浏览器缓存(google pagespeed 问题)

    关于利用浏览器缓存有几个问题 但我没有找到任何关于如何在 ASP NET 应用程序中执行此操作的有用信息 Google 的 Pagespeed 表明这是性能最大的问题 到目前为止 我在我的网络配置
  • 限制每个连接/ip 的 Apache 代理上传速度?

    我查看了 mod bandwidth 和 mod cban 但它们似乎不能满足我的要求 我正在使用 apache 2 2 mod proxy proxy http proxy connect 运行代理服务器 我想限制 客户端的上传速度 这同
  • 如何用Python的ElementTree创建“虚拟根”?

    我正在尝试使用 Python 的 ElementTree 生成 XHTML 文件 但是 ElementTree Element 只允许我创建单个标签 例如 HTML 我需要创建某种虚拟根目录或任何名称 以便我可以将各种 DOCTYPES 等
  • 特定数据库上的 DataAdapter.fill(dataset) 超时异常

    在 VB NET 应用程序 VS2005 中 我通过 SQLDataAdapter 调用存储过程 在我的本地数据库上一切正常 如果我在另一个数据库上执行此操作 则会出现超时异常 这是代码 Public Overloads Shared Fu
  • Mac 允许的最大线程数

    macOS 在报告错误之前允许的最大线程数是多少 我找不到一个简单的答案 我相信是 125 但是我怎样才能找到这个呢 谢谢你的帮助 正如我在评论中所述 这显然取决于 macOS 版本 我不知道确切的限制 但 macOS 肯定会支持每个进程超
  • 如何扩展给定的数字范围以包含由破折号分隔的所有数字

    我正在尝试扩展当前由破折号分隔的数字范围以包含所有数字 好消息是我找到了有助于以下配置的代码 不是我的 宴会厅 1 3 产生 宴会厅 1 宴会厅 2 宴会厅 3 这就是我想要的 问题是 这是以破折号前后没有空格为条件的 目前 宴会厅 1 3
  • Laravel 中的参数错误

    我面临着Invalid parameter number parameter was not defined 是因为这个吗 and orders hour begin gt begin hour and orders hour final
  • 将提供程序注入另一个提供程序

    假设我们有一个名为Comp和两个 Injectable提供者称为P1 and P2 P1需要一个实例P2 P1被注入Comp 如果我声明两个提供商都在 它就可以正常工作Comp像这样 Component providers P1 P2 ex
  • 如何清除 StyledDocument 中的所有样式?

    样式文档 http docs oracle com javase 7 docs api javax swing text StyledDocument html包含各种设置样式的方法 喜欢设置角色属性 http docs oracle co
  • pygame 中有像海龟一样的 .stamp() 方法吗?

    我正在开发一个简单的 pygame 项目 在其中您可以通过按空格来克隆自己 我在 Turtle 中使用以下命令创建了这个项目Turtle stamp 但我不确定pygame中是否存在这样的东西 简短回答 不 没有一个 长答案 但是 您可以轻
  • 如何在 Swift 中加载 UIWebView 中的 URL?

    我有以下代码 UIWebView loadRequest NSURLRequest URL NSURL string google ca 我收到以下错误 NSURLRequest 无法转换为 UIWebView 知道问题是什么吗 加载请求
  • Angular2 - “无法绑定到‘ngSwitchWhen’,因为它不是‘模板’的已知属性。”

    我收到以下错误 无法绑定到 ngSwitchWhen 因为它不是 模板 的已知属性 我读过不同的主题 建议添加 从 angular common 导入 CommonModule 并将 CommonModule 添加到 NgModel的导入部
  • Xcode 8 beta 6 - 架构的冲突值

    我尝试使用 Xcode beta 6 在设备上安装我的应用程序 但它在链接阶段失败并出现以下错误 ld linking module flags Objective C Class Properties IDs have conflicti
  • 应用两个数据框

    我正在使用 R 并且我有两个 data frames A and B 它们都有 6 行 但是A有 25000 个列 基因 并且B有 30 列 我想应用一个带有两个参数的函数f x y where x是每一列A and y是每一列B 到目前为
  • C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移

    我所追求的算法有一个很好的实现here https stackoverflow com questions 39192777 python split a list into n groups in all possible combina