2015-06-01 3 views
-2

Если у вас есть список очень больших чисел в Python, настолько, что компилятор не может получить значение из них в виде чисел. Существует ли функция для сортировки этого списка (сохраняя числа как целые числа) более эффективным способом, например, сравнение числа с числом? (Но без преобразования в строку)Сортировка больших чисел

+1

Python обрабатывает большое количество без проблем. Попробуйте '1 << 1000'. – dlask

+0

Насколько велики ваши номера? Sys.maxsize + 1 должен быть увеличен до длинного, а количество доступного адресного пространства - это ограничение для ваших номеров. – Boris

+0

Какой компилятор? Python может обрабатывать произвольно большие целые числа. Ваш лимит - это память и время процессора ... – dawg

ответ

7

Оба Python 2 и Python 3 ручки произвольно больших целых чисел:

>>> [2**34, 2**38, 2**99, 2**122, 2] 
[17179869184, 274877906944, 633825300114114700748351602688L, 5316911983139663491615228241121378304L, 2] 

и сортировать их, как и ожидалось:

>>> sorted(_) 
[2, 17179869184, 274877906944, 633825300114114700748351602688L, 5316911983139663491615228241121378304L] 

(Python 2 покажет L для как и в примере здесь, в то время как Python 3 показывает целочисленные значения, одинаковые для меньших или больших целых чисел)

2

Это будет решение, которое работает для других языков. У вас может быть список целых чисел. Таким образом, в основном, учитывая число, например 123456789, вы могли бы представить его как

bigNum = [[1,2,3],[4,5,6],[7,8,9]] 

Сравнение больших чисел может быть сделано следующим образом:

  • Сравните количество цифр
  • Если количество цифр равны, сравните числа, начиная с наибольшей цифры.
Смежные вопросы