Что-то достаточно простое, чтобы вписаться в понимание списка, без библиотек или других внешних зависимостей. Для Python> = 3.6 очень просто писать с помощью f-строк.
Идея состоит в том, чтобы позволить преобразованию строк выполнить округление до еще одного места, чем вам нужно , а затем отрубить последнюю цифру.
>>> nout = 3 # desired number of digits in output
>>> [f'{x:.{nout+1}f}'[:-1] for x in [2/3, 4/5, 8/9, 9/8, 5/4, 3/2]]
['0.666', '0.800', '0.888', '1.125', '1.250', '1.500']
Конечно, - это округление, которое происходит здесь (а именно для четвертой цифры), но округление в некоторой точке неизбежно. Если уместен переход между усечением и округлением, вот несколько лучший пример:
>>> nacc = 6 # desired accuracy (maximum 15!)
>>> nout = 3 # desired number of digits in output
>>> [f'{x:.{nacc}f}'[:-(nacc-nout)] for x in [2.9999, 2.99999, 2.999999, 2.9999999]]
>>> ['2.999', '2.999', '2.999', '3.000']
Бонус: удаление нулей справа
>>> nout = 3 # desired number of digits in output
>>> [f'{x:.{nout+1}f}'[:-1].rstrip('0') for x in [2/3, 4/5, 8/9, 9/8, 5/4, 3/2]]
['0.666', '0.8', '0.888', '1.125', '1.25', '1.5']