2015-05-05 4 views
-4

У меня есть списокСортировка знаков после запятой в Python

list1 = ["1.10","1.1","1.23","2.20","2.2"] 

и я использовал

list1.sort(key=float) 

, который дал выход

list1 = ["1.10","1.1","1.23","2.20","2.2"] 

Однако я ищу это:

list1 = ["1.1","1.10","1.23","2.2","2.20"] 

Любые идеи, как я могу это сделать?

+1

* И я использовал list1.sort (key = int), который дал результат * Вы действительно? Какую реализацию и версию Python вы используете? Единственный «выход», который я получаю от попытки, это «ValueError». – Shashank

+1

Во-первых: вам нужно 'key = float'. Во-вторых: Python использует стабильную сортировку. Таким образом, '1.10', равное' 1.1', всегда будет в этом порядке из-за исходного порядка. Простой 'list1.sort()' будет генерировать это поведение для этого единственного списка, потому что он будет сравнивать строки, а не числа – JBernardo

+0

. Вы понимаете, что 1.10 == 1.1 и 2.20 == 2.2, что эти пары чисел * точно * то же самое, и нет причин, почему вы должны ожидать, что они будут сортироваться так или иначе ... –

ответ

1

Если вы хотите принять во внимание длину строки, вы должны сказать ей ключевую функцию. Мы должны построить ключ, в котором значение float считается первым, а длина строки второй.

Самый простой способ сделать это - создать кортеж с этими двумя значениями.

>>> list1 = ["1.10","1.1","1.23","2.20","2.2"] 
>>> list1.sort(key=lambda x: (float(x), len(x))) 
>>> list1 
['1.1', '1.10', '1.23', '2.2', '2.20'] 
+0

спасибо, это сработало! – Ash

0

Это не решение, но это так же, как я мог бы сделать, чтобы он начал:

string1 = ["1.10","1.1","1.23","2.2","2.20"] 
for x in string1: 
    if x.find('0') > 0: 
     place = string1.index(x) 
     string1.remove(x) 
     string1.insert(place+1, x) 
print (string1) 

Единственная проблема, это имеющий теперь как список итерацию, он продолжает идти по тем же значениям снова и снова, подталкивая их вперед. Возможно, функция может помешать этому.

Смежные вопросы