найти наибольшую мощность в два меньше, чем X?

Я делаю это

def power_two(n, base = -1): result = 2 ** base if result < n: base += 1 power_two(n, base) else: if result == n: print base else: print base - 1 

каков питонический способ найти наибольшую мощность в два раза меньше, чем X?

  • Функция find () в стиле MATLAB в Python
  • Внедрение системы несвязанных наборов в Python
  • Как проверить, существует ли значение в словаре (python)
  • Пример EDIT: power_two (100) возвращает только мощность

  • Правильно печатать на консоли
  • Как импортировать numpy в оболочку python
  • Как преобразовать numpy.matrix или массив в scipy разреженную матрицу
  • list extend () в индекс, вставляя элементы списка не только до конца
  • Простое распознавание объектов
  • Запуск задания с использованием потоковой передачи данных и mrjob: PipeMapRed.waitOutputThreads (): сбой подпроцесса с кодом 1
  • 4 Solutions collect form web for “найти наибольшую мощность в два меньше, чем X?”

    Найдите логарифм и обрезайте его:

     def power_two(n): return int(math.log(n, 2)) 

    Вы можете использовать bit_length () :

     def power_two(n): return n.bit_length() - 1 

    По определению для n != 0 : 2**(n.bit_length()-1) <= abs(n) < 2**n.bit_length()

    Два способа: сначала работает только в Python 2.7 и, возможно, 3+:

     import random for number in (random.randint(0,1<<32) for _ in range(16)): print "%20i,%4i, %4i" % (number, number.bit_length()-1, len(bin(number))-3) 

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

    Это также в Java. Поэтому вам нужно будет преобразовать его.

     public static int getPowerOfTwo(int size) { int n = -1; while (size >> ++n > 0); return (1 << n - 1 == size) ? size : 1 << n; } public static int getNextPowerOfTwo(int size) { int n = -1; while (size >> ++n > 0); return 1 << n; } public static int getPreviousPowerOfTwo(int size) { int n = -1; while (size >> ++n > 0); return 1 << n - 1; } 
    Python - лучший язык программирования в мире.