Форум сайта python.su
Здравствуйте. С Python познакомился только вчера, возникло много вопросов, большинство нахожу на форумах, а вот с этим не смог справиться сам.
Пример: выводятся подобные большие числа:
5263157894736.632 52631578947368.21 526315789473684.0 5263157894736842.0 5.2631578947368424e+16 5.263157894736842e+17
Офлайн
> вывести только целое число
>>> s = 1.5
>>> int(s)
1
Отредактировано Tort (Ноя. 24, 2013 08:55:27)
Офлайн
15
lst = [5263157894736.632, 52631578947368.21, 526315789473684.0, 5263157894736842.0, 5.2631578947368424e+16, 5.263157894736842e+17] for i in lst: if i.is_integer(): print(i)
Офлайн
43
define “целое число”
из примера последние четыре можно назвать целыми
Офлайн
TortЭто преобразование в целое ведь? Мне нужно именно отобрать целое число
> вывести только целое число>>> s = 1.5>>> int(s)1

Офлайн
python_new
Tort
> вывести только целое число>>> s = 1.5>>> int(s)1
Это преобразование в целое ведь? Мне нужно именно отобрать целое число
Офлайн
20
Влезу я и сюда, со своей функциональщиной, может пригодится:
>>> filter(float.is_integer, map(float, [1., 2, '3.33', 4.5, 5.67, '6.'])) [1.0, 2.0, 6.0]
Офлайн
33
bw
Влезу я и сюда, со своей функциональщиной
filter(lambda x: not O.itemgetter(0)(math.modf(x)), [5.23e+5, 2, 3, 2.5])
Отредактировано Budulianin (Ноя. 24, 2013 16:05:13)
Офлайн
20
`O.itemgetter` здесь совершенно лишний, можно и просто `math.modf(x)[0]`. По мотивам предыдущего, но сохраняя нелюбовь к `lambda` можно сделать так:
>>> import math >>> import itertools as I >>> import operator as O >>> I.imap(O.itemgetter(1), I.ifilterfalse(O.itemgetter(0), I.imap(math.modf, [5.23e+5, 2, 3, 2.5]))) <itertools.imap object at ...> >>> list(_) [523000.0, 2.0, 3.0]
Отредактировано bw (Ноя. 24, 2013 16:34:05)
Офлайн
857
bwэто нарушает pep8 (пиши модули маленькими буквами)>>> import itertools as I >>> import operator as O
bwпоэтому вот это читается как “какой-то класс O имеет метод itemgetter”O.itemgetter(0)
Отредактировано py.user.next (Ноя. 24, 2013 18:21:45)
Офлайн