Open In App

Python – Produce K evenly spaced float values

Last Updated : 16 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a range and element K, generate K float values that are evenly spaced.

Input  :  i = 4, j = 6, K = 10
Output :  [4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0]
Explanation :  The difference 0.2 is added after 4 to produce 10 elements till 6.

Input  : i = 10, j = 20, K = 2
Output :  [15.0, 20.0]
Explanation :  5 is difference and is added each time.

Method #1: Using loop

This is one of the ways in which this task can be performed. In this, we iterate till K while increasing the counter for difference between successive elements.

Python3




# Python3 code to demonstrate working of
# Produce K evenly spaced float values
# Using loop
 
# initializing range
i, j = 2, 10
 
# Initialize K
K = 15
 
# computing difference
diff = (j - i) / K
res = []
 
# using loop to add numbers to result
for idx in range(1, K + 1):
    res.append(i + (diff * idx))
 
# printing result
print("The constructed list : " + str(res))


Output

The constructed list : [2.533333333333333, 3.0666666666666664, 3.6, 4.133333333333333, 4.666666666666666, 5.2, 5.733333333333333, 6.266666666666667, 6.8, 7.333333333333333, 7.866666666666666, 8.4, 8.933333333333334, 9.466666666666667, 10.0]

Time Complexity: O(n) where n is the number of elements 
Auxiliary Space: O(n) where n is the number of elements in the new list.

Method #2: Using list comprehension

The working of this method is similar to above method.  The difference being compact way in which this solution is formulated using list comprehension.

Python3




# Python3 code to demonstrate working of
# Produce K evenly spaced float values
# Using loop
 
# initializing range
i, j = 2, 10
 
# Initialize K
K = 15
 
# computing difference
diff = (j - i) / K
 
# using list comprehension to formulate elements
res = [i + (diff * idx) for idx in range(1, K + 1)]
 
# printing result
print("The constructed list : " + str(res))


Output

The constructed list : [2.533333333333333, 3.0666666666666664, 3.6, 4.133333333333333, 4.666666666666666, 5.2, 5.733333333333333, 6.266666666666667, 6.8, 7.333333333333333, 7.866666666666666, 8.4, 8.933333333333334, 9.466666666666667, 10.0]

Time Complexity: O(n) where n is the number of elements in the list 
Auxiliary Space: O(n) where n is the number of elements in the list

Method #3 : Using recursion+round()

In this method, we use list comprehension to produce k evenly spaced values between i and j. We calculate the step size by dividing the difference between j and i by k-1. We use this step size to generate k values using a for loop inside the list comprehension. Finally, we round the values to 1 decimal place using the round() function.

Python3




def evenly_spaced_floats(i, j, k):
    # Calculate the step size between each float value
    step = (j - i) / (k - 1)
     
    # Generate a list of K evenly spaced float values
    # by adding a multiple of the step size to the start value i
    # for each value in the range [0, K-1]
    # and rounding each value to 1 decimal place
    return [round(i + n*step, 1) for n in range(k)]
 
# Example usage
i = 4
j = 6
k = 10
 
result = evenly_spaced_floats(i, j, k)
print(result)


Output

[4.0, 4.2, 4.4, 4.7, 4.9, 5.1, 5.3, 5.6, 5.8, 6.0]

Time complexity: O(k)
Auxiliary Space: O(k)

Method #4: Using numpy:

  • Calculate the step size between each float value by subtracting the start value i from the end value j, and then dividing by the number of values to generate k minus 1. This will give us the increment between each value in the sequence.
  • Generate a 1D array of k evenly spaced float values. We can use a generator expression to compute each value by adding a multiple of the step size to the start value i for each value in the range [0, k-1], and rounding each value to 1 decimal place. Then, we can use the np.fromiter function to create a numpy array from the generator expression.
  • Return the resulting numpy array of evenly spaced float values.

Python3




import numpy as np
 
def evenly_spaced_floats(i, j, k):
    # Calculate the step size between each float value
    step = (j - i) / (k - 1)
 
    # Generate a 1D array of K evenly spaced float values
    # by adding a multiple of the step size to the start value i
    # for each value in the range [0, K-1]
    # and rounding each value to 1 decimal place
    return np.fromiter((i + n*step for n in range(k)), dtype=float)
 
# Example usage
i = 4
j = 6
k = 10
 
result = evenly_spaced_floats(i, j, k)
print(result)
#This code is contributed by Jyothi Pinjala.


Output:

[4.         4.22222222  4.44444444  4.66666667  4.88888889  5.11111111
5.33333333  5.55555556  5.77777786.        ]

Time complexity: O(k) since it involves generating a list of K evenly spaced float values, which requires iterating over a range of K values.
Auxiliary space: O(k) since it involves creating a list of K float values to store the generated values.

Method #5: Using map function with lambda expression

  • Define a function named “evenly_spaced_floats”
  • Calculate the step size between each float value
  • Generate a list of K integers from 0 to K-1 using the range function
  • Use the map function with lambda expression to generate a list of K evenly spaced float values
  • Round each value to 1 decimal place using the round function
  • Return the list of evenly spaced float values

Python3




def evenly_spaced_floats(i, j, k):
    # Calculate the step size between each float value
    step = (j - i) / (k - 1)
     
    # Generate a list of K integers from 0 to K-1
    indices = range(k)
     
    # Use the map function with lambda expression to generate a list of K evenly spaced float values
    values = map(lambda n: round(i + n*step, 1), indices)
     
    # Convert the map object to a list and return it
    return list(values)
 
# Example usage
i = 4
j = 6
k = 10
 
result = evenly_spaced_floats(i, j, k)
print(result)


Output

[4.0, 4.2, 4.4, 4.7, 4.9, 5.1, 5.3, 5.6, 5.8, 6.0]

Time complexity: O(k), as we need to iterate over the K values to generate the list of evenly spaced float values.
Auxiliary space: O(k), as we need to store the list of K integers and the list of K evenly spaced float values.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads