如何在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();
代码逻辑解释:
Enumerable.Repeat(new[] {0, 1}, targetLength / 2):生成targetLength/2个重复的[0,1]数组(这里的整数除法和Python的//行为完全一致)。SelectMany(subArray => subArray):把嵌套的数组序列展平成连续的int序列——这一步是关键,不然你得到的会是数组的集合,而不是单个整数的序列。Concat(Enumerable.Repeat(1, targetLength % 2)):处理奇数长度的情况:- 当
targetLength是奇数时,targetLength%2=1,会追加一个1 - 当
targetLength是偶数时,targetLength%2=0,Repeat(1,0)会生成空序列,不会改变原有结果
- 当
ToList():把最终的序列转换为List<int>,和你Python代码的输出结构完全一致。
这个方案的性能也很可观,生成1000万级别的元素时,Enumerable的方法会在ToList阶段一次性完成内存分配和元素填充,效率和手动循环接近,但代码更简洁易读。
内容的提问来源于stack exchange,提问作者insomniac
相关产品推荐
相关产品推荐

