Дан список, элементы которого – либо целые числа, либо списки, содержащие по одному целому числу. Например, [[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]