This crops up every now and then for me: I have some C# code badly wanting the range()
function available in Python.
I am aware of using
for (int i = 0; i < 12; i++)
{
// add code here
}
But this brakes down in functional usages, as when I want to do a Linq Sum()
instead of writing the above loop.
Is there any builtin? I guess I could always just roll my own with a yield
or such, but this would be so handy to just have.
You're looking for the Enumerable.Range
method:
var mySequence = Enumerable.Range(0, 12);
Just to complement everyone's answers, I thought I should add that Enumerable.Range(0, 12);
is closer to Python 2.x's xrange(12)
because it's an enumerable.
If anyone requires specifically a list or an array:
Enumerable.Range(0, 12).ToList();
or
Enumerable.Range(0, 12).ToArray();
are closer to Python's range(12)
.
Enumerable.Range(start, numElements);
namespace CustomExtensions
{
public static class Py
{
// make a range over [start..end) , where end is NOT included (exclusive)
public static IEnumerable<int> RangeExcl(int start, int end)
{
if (end <= start) return Enumerable.Empty<int>();
// else
return Enumerable.Range(start, end - start);
}
// make a range over [start..end] , where end IS included (inclusive)
public static IEnumerable<int> RangeIncl(int start, int end)
{
return RangeExcl(start, end + 1);
}
} // end class Py
}
Usage:
using CustomExtensions;
Py.RangeExcl(12, 18); // [12, 13, 14, 15, 16, 17]
Py.RangeIncl(12, 18); // [12, 13, 14, 15, 16, 17, 18]