Search code examples
pythonarrayslistnumpylist-comprehension

Adding a value to the first index of a list of array by using a list comprehension Python


The Vals list comprehension below modifies Values such that for the number of nth rows it indexes the array values as such. How would I be able to add an increment to the Vals list comprehension where it adds 100 in front of all of the modified lists? I want to only modify the list comprehension function to do that.

import numpy as np 

first_index_val = 100
Values = np.array([[130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72],
                  [130,123,135.3,139.05,156.08,163.88,173.72]])

Vals = np.array([arr[i:] for i,arr in enumerate(Values.tolist())])

Output:

[list([130.0, 123.0, 135.3, 139.05, 156.08, 163.88, 173.72])
 list([123.0, 135.3, 139.05, 156.08, 163.88, 173.72])
 list([135.3, 139.05, 156.08, 163.88, 173.72])
 list([139.05, 156.08, 163.88, 173.72]) list([156.08, 163.88, 173.72])
 list([163.88, 173.72]) list([173.72])]

Expected Output:

[list([100, 130.0, 123.0, 135.3, 139.05, 156.08, 163.88, 173.72])
 list([100, 123.0, 135.3, 139.05, 156.08, 163.88, 173.72])
 list([100, 135.3, 139.05, 156.08, 163.88, 173.72])
 list([100, 139.05, 156.08, 163.88, 173.72]) list([100, 156.08, 163.88, 173.72])
 list([100, 163.88, 173.72]) list([100, 173.72])]

Solution

  • Here is my take on it, simple and declarative.

    import numpy as np
    
    first_index_val = 100
    values = np.array([[130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
                   [130, 123, 135.3, 139.05, 156.08, 163.88, 173.72]])
    
    values = np.array([ [100] + arr[i:] for i, arr in enumerate(values.tolist())])
    print(values)