Задача: Отсортировать несортируемое

Дан список, элементы которого – либо целые числа, либо списки, содержащие по одному целому числу. Например, [[3], 4, [2], [5], 1, 6].

Если вы попытаетесь отсортировать этот список с помощью sorted([[3], 4, [2], [5], 1, 6]), Python будет ныть о том, что не может сравнивать целые числа и списки.

Однако мы, люди, ясно видим, что этот список можно отсортировать по содержимому элементов: [1, [2], [3], 4, [5], 6]. Создайте функцию, которая, получив список, подобный приведенному выше, сортирует его в соответствии с содержимым элементов.

Пример:

sort_it([4, 1, 3]) ➞ [1, 3, 4]

sort_it([[4], [1], [3]]) ➞ [[1], [3], [4]]

sort_it([4, [1], 3]) ➞ [[1], 3, 4]

sort_it([[4], 1, [3]]) ➞ [1, [3], [4]]

sort_it([[3], 4, [2], [5], 1, 6]) ➞ [1, [2], [3], 4, [5], 6]

Примечание:

Повторимся, что элементами списка будут либо целые числа, либо списки с одним целым числом.

Варианты решений:

def sort_it(lst):
	return sorted(lst, key = lambda e: e if type(e) == int else e[0])
def sort_it(lst):
	ints = [i for i in lst if type(i) == int]
	lists = [i[0] for i in lst if type(i) == list]
	output = ints + lists
	output.sort()
	for i in range(len(output)):
		if output[i] in lists:
			output[i] = [output[i]]
	return output
def lazy(lst):
    for i in lst:
        if type(i) is list:
            yield int(str(i)[1:-1]), i
        else:
            yield i, i
 

sort_it = lambda z: [y for _, y in sorted(lazy(z))]
def sort_it(lst):
	tp = [[x, x] if isinstance(x, int) else [x, x[0]] for x in lst]
	ls = sorted(tp, key = lambda x: x[1])
	return [x[0] for x in ls]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *