Python Data structure index Start at 1 instead of 0?

前端 未结 4 721
说谎
说谎 2020-12-19 02:06

I have a weird question: I have this list of 64 numbers that will never change:

(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,          


        
相关标签:
4条回答
  • 2020-12-19 02:42

    You could use a dictionary, or you could simply subtract one from your index before accessing it.

    Also, I note that your 64 numbers are in a simple arithmetic progression. Why store them at all? You can use this:

    def my_number(i):
        return 2*i
    

    If the list you showed was actually an example, and the real numbers are more complicated, then use a list with a dummy first element:

    my_nums = [0, 2, 4, 6, 8, ....]
    

    Then you can get 2 as my_nums[1].

    0 讨论(0)
  • 2020-12-19 02:50

    You could override the item getter and make a specialized tuple:

    class BaseOneTuple(tuple):
        __slots__ = () # Space optimization, see: http://stackoverflow.com/questions/472000/python-slots 
        def __new__(cls, *items):
            return tuple.__new__(cls, items) # Creates new instance of tuple
        def __getitem__(self, n):
            return tuple.__getitem__(self, n - 1)
    
    
    b = BaseOneTuple(*range(2, 129, 2))
    b[2] == 4
    
    0 讨论(0)
  • 2020-12-19 02:53

    Just insert a 0 at the beginning of the structure:

    (0, 2, 4, 6, 8, ...)
    
    0 讨论(0)
  • 2020-12-19 03:03

    You could use range(2, 129, 2) to generate the numbers in the range 1 - 128 in increments of 2 and convert this list into a tuple if it's not going to change.

    t = tuple(range(2, 129, 2))
    
    def numbers(n):
       return t[n-1]
    

    Given the global tuple t, function numbers could retrieve elements using a 1-based (instead of 0-based) index.

    0 讨论(0)
提交回复
热议问题