Я хочу, чтобы python делал что-то похожее на MS Excel =ROUNDDOWN (number, num_digits). Так что в моем примере, который выглядит так

a = [3.5, 43.689, 113.225, 65.4545]

Я пытался так:

a = [3.5, 43.689, 113.225, 65.4545]
b = [str(i).split(".") for i in a]

c = [i[0] for i in b]
d = [i[1][0] for i in b]

e = list(zip(c,d))
f = [float(".".join(i)) for i in e]

Который дал выход мне нужно:

>>> print (f)
[3.5, 43.6, 113.2, 65.4]

Есть ли лучший и самый простой способ сделать это в Python?

4
Watarap 31 Авг 2017 в 20:18

4 ответа

Лучший ответ

int округляет до нуля, если это то, что вы хотите:

a = [3.5, 43.689, 113.225, 65.4545]
[int(x * 10) / 10 for x in a]

Выход:

[3.5, 43.6, 113.2, 65.4]
1
Stop harming Monica 31 Авг 2017 в 17:58

Я думаю, что вы могли бы использовать круглое выражение:

>>> a = [3.5, 43.689, 113.225, 65.4545]
>>> [float(Decimal(b).quantize(decimal.Decimal('.0'), rounding=decimal.ROUND_DOWN)) for b in a]
[3.5, 43.6, 113.2, 65.4]

Я надеюсь, что это поможет вам;)

1
Dayana 31 Авг 2017 в 18:18

Я думаю, что это более Pythonic способ:

from decimal import Decimal, ROUND_DOWN
Decimal(65.4545).quantize(Decimal('.0'), rounding=ROUND_DOWN)
2
Surrerstry 31 Авг 2017 в 17:33

Так же, как вы почти:

a = [3.5, 43.689, 113.225, 65.4545]
f = [float("{:.1f}".format(x)) for x in a]

В любом случае, имейте в виду, что вы можете просто работать с десятичными знаками и использовать формат для его представления.

Затем вы можете преобразовать с помощью математики floor следующим образом:

import math
f = [math.floor(x * 10)/10.0 for x in a]
print(f)

Здесь у вас есть живой пример.

3
Netwave 31 Авг 2017 в 17:29