2017-02-10 4 views
0

Мой код написан на python 3 и предназначен для печати палиндромов. Он должен перебрать все палиндромных продукты 2 3-х цифр, как показано ниже:Почему сортировка списка возвращает None?

mylist=[] 
for i in range(999,99,-1): 
    for x in range(999, i-1, -1,): 
     number=i*x 
     number=str(number) 
     if number==number[::-1]: 
      #print(number)   
      mylist.append(number) 
mylist=mylist.sort(reverse=True) 
print(mylist) 

Примечание комментируемой из печати. Когда это было все еще на месте, все палиндромы, которые должны были быть распечатаны, вышли. Когда я запускаю свой код без инструкции print, консоль выводит только «Нет».

Насколько я вижу, моя логика в порядке, так почему это происходит? EDIT: Кроме того, когда я сортирую свой список в обратном порядке, на первом месте стоит 99999. Я понимаю, это потому, что python смотрит на последовательные 9 и считает, что это самый большой. Однако есть ли простой способ получить самое большое количество?

+5

свяжешь 'mylist' к результату вызова' .sort' который является операцией, в месте, которое возвращает 'None'. Просто выполните 'mylist.sort (reverse = True)'. –

+0

@Shawn Li Не уверен, что вы имеете в виду в своем редактировании, но номера сортируются по возрастанию числового порядка по умолчанию, но вы добавили 'reverse = True', который поместит наибольшее число первым - потому что хорошо, это * есть * фактический самое большое число. – JulienD

+0

@JulienD они не сортируются по числовому порядку, потому что на первом месте стоит 99999, но число, такое как 101101, больше, чем 99999. Так что я хочу сказать, что вы можете сделать число с наибольшим числом, самое близкое к бесконечности, на первом месте? –

ответ

5

list.sort() всегда возвращает None (список сортируется на месте). То, что вы хотите, это sorted(list), который возвращает новый отсортированный список.

Тогда вы можете сортировать их, как это:

mylist = [int(x) for x in mylist] 
mylist.sort(reverse=True) 
mylist = [str(x) for x in mylist]