Reputation: 3066
How can I make an array start at subscript 1 instead of subscript 0 in python?
Basically to solve this problem in python.
Upvotes: 9
Views: 27615
Reputation: 555
You can use custom indexes of the fidx
module:
import fidx
# create custom type `list1b` from `list`
fidx.add(list, name='list1b')
# add a map for int indexes (i -> i-1)
fidx.list1b.set_index_map(int, lambda _,i: i-1, override=True)
# create your list
b = fidx.list1b([1,2,3])
print(b[1], b[2], b[3]) # (1, 2, 3)
Upvotes: 0
Reputation: 82775
You can use enumerate() method
a = ['a', 'c', 'v', 's']
for i,v in enumerate(a, 1):
print i, v
1 a
2 c
3 v
4 s
Upvotes: 7
Reputation: 114015
+1 to Max. Here's something else you could try:
Just add a None
at index 0 of your list. This should get you the functionality. You'll just need to remember to snip out the leading None
when you pass your list off to MATLAB
Upvotes: 6
Reputation: 10985
If you really want to do this, you can create a class that wraps a list, and implement __getitem__
and __setitem__
to be one based. For example:
def __getitem__(self, index):
return self.list[index-1]
def __setitem__(self, index, value):
self.list[index-1] = value
However, to get the complete range of flexibility of Python lists, you would have to implement support for slicing, deleting, etc. If you just want a simple view of the list, one item at a time, this should do it for you.'
See Python Documentation for Data Model for more information on creating custom classes that act like sequences or mappings.
Upvotes: 12