Неравномерная поддержка base-36 в Python? - PullRequest
4 голосов
/ 23 ноября 2010

Я недавно работал с base-36 и никогда не был удовлетворен обычным ответом на преобразование целых чисел в строки base-36. Это выглядит немного несбалансированным ...

def to_base36(value):
    if not isinstance(value, int):
        raise TypeError("expected int, got %s: %r" % (value.__class__.__name__, value))

    if value == 0:
        return "0"

    if value < 0:
        sign = "-"
        value = -value
    else:
        sign = ""

    result = []

    while value:
        value, mod = divmod(value, 36)
        result.append("0123456789abcdefghijklmnopqrstuvwxyz"[mod])

    return sign + "".join(reversed(result))

... по сравнению с обратным преобразованием ...

def from_base36(value):
    return int(value, 36)

Действительно ли Python не включает именно эту батарею?

Ответы [ 3 ]

8 голосов
/ 23 ноября 2010

Вы пробовали пакет таз ?

>>> import basin
>>> basin.encode("0123456789abcdefghijklmnopqrstuvwxyz", 100)
'2s'

В комплект не входят батареи, но хранилище pypi похоже на магазин, в котором можно собирать батареи с минимальной суетой.

4 голосов
/ 23 ноября 2010

Правильно. Не в каждом магазине есть батареи N или J .

1 голос
/ 23 ноября 2010

Чтобы продолжить аналогию, батарея такого размера может не входить в базовую комплектацию, но ее достаточно легко приобрести в Интернете для совместимых со штекерами аксессуаров:

http://code.activestate.com/recipes/365468-number-to-string-in-arbitrary-base/

...