Scale a feature list to [0,1] via (x − min)/(max − min). Uses min() and max() as primitives to isolate the scaling formula; a single loop applies the transform. Library: sklearn.preprocessing.MinMaxScaler().fit_transform(X) on a column-shaped 2D array; .ravel().tolist() extracts a flat list. RESULT: scaled list (rounded).

By hand

data=[10,20,30,40,50], min=10, max=50, range=40. Each value: (v−10)/40. Scaled: [0.0, 0.25, 0.5, 0.75, 1.0].

naive.py
Replay: real traced execution (multi-file project)
data = [10, 20, 30, 40, 50]
mn = min(data)
mx = max(data)
rng = mx - mn
scaled = []
for v in data:
    scaled.append(round((v - mn) / rng, 4))
print('RESULT:', scaled)
  1. data ← [10, 20, 30, 40, 50]

    1data = [10, 20, 30, 40, 50]2mn = min(data)
    values this step[10, 20, 30, 40, 50]data
  2. mn ← 10

    1data = [10, 20, 30, 40, 50]2mn = min(data)3mx = max(data)
    values this step10mn
  3. mx ← 50

    2mn = min(data)3mx = max(data)4rng = mx - mn
    values this step50mx
  4. rng ← 40

    3mx = max(data)4rng = mx - mn5scaled = []
    values this step40rng
  5. scaled ← []

    4rng = mx - mn5scaled = []6for v in data:
    values this step[]scaled
  6. v ← 10

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
    values this step10v
  7. scaled ← [0.0]

    6for v in data:7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this step[] [0.0]scaled
  8. v ← 20

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
    values this step10 20v
  9. scaled ← [0.0, 0.25]

    6for v in data:7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this step[0.0] [0.0, 0.25]scaled
  10. v ← 30

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
    values this step20 30v
  11. scaled ← [0.0, 0.25, 0.5]

    6for v in data:7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this step[0.0, 0.25] [0.0, 0.25, 0.5]scaled
  12. v ← 40

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
    values this step30 40v
  13. scaled ← [0.0, 0.25, 0.5, 0.75]

    6for v in data:7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this step[0.0, 0.25, 0.5] [0.0, 0.25, 0.5, 0.75]scaled
  14. v ← 50

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
    values this step40 50v
  15. scaled ← [0.0, 0.25, 0.5, 0.75, 1.0]

    6for v in data:7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this step[0.0, 0.25, 0.5, 0.75] [0.0, 0.25, 0.5, 0.75, 1.0]scaled
  16. for v in data:

    5scaled = []6for v in data:7    scaled.append(round((v - mn) / rng, 4))
  17. stdout ← RESULT: [0.0, 0.25, 0.5, 0.75, 1.0]

    7    scaled.append(round((v - mn) / rng, 4))8print('RESULT:', scaled)
    values this stepRESULT: [0.0, 0.25, 0.5, 0.75, 1.0]stdout

With scikit-learn

MinMaxScaler().fit_transform(X) returns a 2D array; .ravel().tolist() flattens it. The snapshot shows the learned min and max for verification.

library.py
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from dalib.display import set_display
set_display()

data = [10, 20, 30, 40, 50]
X = np.array(data).reshape(-1, 1)
scaler = MinMaxScaler()
scaled = [round(v, 4) for v in scaler.fit_transform(X).ravel().tolist()]
print('min:', float(scaler.data_min_[0]))
print('max:', float(scaler.data_max_[0]))
print('RESULT:', scaled)
min: 10.0
max: 50.0
RESULT: [0.0, 0.25, 0.5, 0.75, 1.0]

Implementation notes

  • MinMaxScaler applies exactly (x − min)/(max − min), matching the naive formula precisely.
  • Sensitive to outliers: a single extreme value shifts min or max, compressing all other scaled values toward the center.
  • reshape(-1, 1) is required because sklearn expects a 2D feature matrix (n_samples × n_features); a 1D list is ambiguous.
  • Cross-reference: standardize-features (this chapter) for the mean/std alternative that is less sensitive to outliers.