jgr208
jgr208

Reputation: 3066

make array index 1 instead of index 0 based

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

Answers (4)

DPD-
DPD-

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

Rakesh
Rakesh

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

inspectorG4dget
inspectorG4dget

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

Max
Max

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

Related Questions