You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中实现Python等价的非迭代千万级列表生成?

在C#中实现等价于Python列表生成式的无遍历方案

当然可以做到!先拆解一下你Python代码的逻辑:

  • 当N为偶数时:重复[0, 1]共N/2次,得到长度为N的列表
  • 当N为奇数时:重复[0, 1]共N//2次,再追加一个1,总长度为N

在C#里,我们可以用Enumerable类的方法组合实现这个逻辑,完全不需要手动遍历:

int targetLength = 10000000; // 你的目标列表长度
List<int> res = Enumerable.Repeat(new[] { 0, 1 }, targetLength / 2)
                          .SelectMany(subArray => subArray)
                          .Concat(Enumerable.Repeat(1, targetLength % 2))
                          .ToList();

代码逻辑解释:

  1. Enumerable.Repeat(new[] {0, 1}, targetLength / 2):生成targetLength/2个重复的[0,1]数组(这里的整数除法和Python的//行为完全一致)。
  2. SelectMany(subArray => subArray):把嵌套的数组序列展平成连续的int序列——这一步是关键,不然你得到的会是数组的集合,而不是单个整数的序列。
  3. Concat(Enumerable.Repeat(1, targetLength % 2)):处理奇数长度的情况:
    • 当targetLength是奇数时,targetLength%2=1,会追加一个1
    • 当targetLength是偶数时,targetLength%2=0,Repeat(1,0)会生成空序列,不会改变原有结果
  4. ToList():把最终的序列转换为List<int>,和你Python代码的输出结构完全一致。

这个方案的性能也很可观,生成1000万级别的元素时,Enumerable的方法会在ToList阶段一次性完成内存分配和元素填充,效率和手动循环接近,但代码更简洁易读。

内容的提问来源于stack exchange,提问作者insomniac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:28:27