Шаблоны в двоичных дробях с Python - PullRequest
3 голосов
/ 10 ноября 2010

Исследование идентификация шаблона требует идентификации повторяющихся шаблонов в двоичных представлениях дробей рациональных чисел. bin(2**24/n) снимает начальные нули , например bin(2**24/11) -> 0b101110100010111010001 вместо 0b000101110100010111010001. Количество ведущих нулей, конечно, варьируется. Очевидная картина здесь - 0001011101 ...

Я нуби с Python, который все еще находится на кривой обучения. Есть ли подходящий для Python способ подойти к этому?

Ответы [ 2 ]

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

Это может быть сделано с форматированием строки, в 2.6 +:

>>> '{0:024b}'.format(23)
'000000000000000000010111'
2 голосов
/ 10 ноября 2010

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

>>> from bitstring import BitArray
>>> a = BitArray(24)          # 24 zero bits
>>> a.uint = 2**24/11         # set the unsigned integer propery
>>> a.bin                     # get the binary propery
'000101110100010111010001'

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

>>> a.uint /= 2
>>> a.bin
'000010111010001011101000'
>>> list(a.findall('0b1011'))
[4, 14]
>>> a *= 2     # concatenation
>>> a.bin
'000010111010001011101000000010111010001011101000'
>>> a.replace('0b00001', '0xe')
2              # 2 replacements made
>>> a.bin
'1110011101000101110100011100111010001011101000'

Я не уверен в ваших точных потребностях, так что все этоможет быть излишним, и вы, возможно, не захотите использовать внешнюю библиотеку в любом случае, но встроенная в Python поддержка битовых массивов является немного базовой.

...