Maneira pitônica de substituir valores de lista por limites superior e inferior (fixação, recorte, limiar)?

Quero substituir os contornos de uma lista. Portanto, defino um limite superior e inferior. Agora todos os valores acimaupper_bound e abaixolower_bound é substituído pelo valor associado. Minha abordagem foi fazer isso em duas etapas, usando uma matriz numpy.

Agora, me pergunto se é possível fazer isso em uma única etapa, pois acho que isso poderia melhorar o desempenho e a legibilidade.

Existe uma maneira mais curta de fazer isso?

import numpy as np

lowerBound, upperBound = 3, 7

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

arr[arr > upperBound] = upperBound
arr[arr < lowerBound] = lowerBound

# [3 3 3 3 4 5 6 7 7 7]
print(arr)

questionAnswers(2)

yourAnswerToTheQuestion