Найти - Пользователи
Полная версия: Задача. Числа в словарном порядке
Начало » Python для новичков » Задача. Числа в словарном порядке
1
ElmarB
Привет, помогите с задачей.
Не получается отсортировать.

Задача
Напечатайте входную последовательность натуральных чисел, отсортировав ее по возрастанию сначала единиц, потом десятков, потом сотен и тп.

Входные данные

Целое число 0 < N ≤ 1000. Затем N натуральных чисел, не превышающих 30000, через пробел.

Выходные данные

Числа по возрастанию единиц, при равных единиц - по возрастанию десятков, при равных единицах и десятков - по возрастанию сотен и тп.

Примеры

Вход
5
5 23 3 43 123
Выход
3 23 123 43 5

Striver
Как вариант, переводи числа в строки, переворачивай их, сортируй, и переворачивай обратно.
Rodegast
 >>> s = [5, 23, 3, 43, 123]
>>> sorted(s, key=lambda x: (x%10, x%100))
[3, 23, 123, 43, 5]
ElmarB
Striver
Как вариант, переводи числа в строки, переворачивай их, сортируй, и переворачивай обратно.

Спасибо, это реально помогло.
Вот что получилось. Возможно можно было бы покороче, но всё же
 a = input()
e = ''
A = []
B = []
for i in range(len(a)):
	if a[i] != ' ':
		e +=a[i]
	if a[i] == ' ':
		A.append(e)
		A1 = ''
A.append(e)
for i in range(len(A)):
	B.append(A[i][::-1])
B.sort()
C = []
for i in range(len(B)):
	C.append(int(B[i][::-1]))
	print(C[i], end=' ')
OlegFac
2 дня тупил, потом сделал сначала перемудрив вот так:
 n = int(input())
a = str(input()).split(' ')
def comparator(a1, b1):
    if      a1[4] > b1[4] or  (a1[4] == b1[4] and a1[3] > b1[3]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] > b1[2]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] == b1[2] and a1[1] > b1[1]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] == b1[2] and a1[1] == b1[1] and a1[0] > b1[0]):
        return True
    return False
for p1 in range(n - 1):
    for p2 in range(p1 + 1, n):
        if comparator((5-len(a[p1]))*'0'+a[p1], (5-len(a[p2]))*'0'+a[p2]):
            a[p1], a[p2] = a[p2], a[p1]
for i in a:
    print(i, end=' ')

а потом подумав и поняв что строки сравниваются именно так, как того требует задача - исправился на простое решение:
 n = int(input())
a = str(input()).split(' ')
for p1 in range(n - 1):
    for p2 in range(p1 + 1, n):
        if a[p1][::-1] > a[p2][::-1]:
            a[p1], a[p2] = a[p2], a[p1]
for i in a:
    print(i, end=' ')

ПРОФИТ
N Результат Время (с) Баллы
1 OK 0.037 1 (1)
2 OK 0.037 1 (1)
3 OK 0.037 1 (1)
4 OK 0.037 1 (1)
5 OK 0.042 1 (1)
6 OK 0.470 1 (1)
marvellik
 _ = input()
print(sorted(input().split(), key = lambda x : x[::-1]))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB