Сортировать список после работы в очереди в python - PullRequest
0 голосов
/ 03 апреля 2020

Я должен сначала поставить в очередь элемент в списке, а затем отсортировать массив на основе первого элемента внутри подсписка, а также поддерживать порядок, в котором элементы были вставлены, если элемент был вставлен перед элементом, имеющим тот же номер в подсписке, что элемент, вставленный ранее, будет отображаться первым.

Пример:

A - это наш список, в котором первый элемент вставляется как [1,2], второй элемент как [2, 2], третий элемент как [1,1]

, поэтому массив будет выглядеть следующим образом: A=[[1,2],[1,1],[2,2]] здесь [1,1] не go вперед, потому что [1,2] был вставлен перед [1,1].

Использование A=sorted(A) после вставки элементов приводит к A=[[1,1],[1,2],[2,2]]

используемому коду :( n - количество элементов, а b - добавляемый подсписок)

n=int(input())
A=[]
for i in range(n):
    b=list(map(str, input().rstrip().split()))
    A.append(b)
    A=sorted(A)

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Вместо этого вы можете сортировать по первому элементу каждого подсписка в качестве ключа:

A.sort(key=lambda t: t[0])

Поскольку метод sort поддерживает порядок вставки, когда сравниваются два элемента.

Выдержка из документации :

Метод sort() гарантированно стабилен. Сортировка стабильна, если она гарантирует отсутствие изменения относительного порядка элементов, которые сравниваются равными - это полезно для сортировки за несколько проходов (например, сортировка по отделу, затем по уровню зарплаты).

0 голосов
/ 04 апреля 2020

Вы можете использовать встроенную функцию enumerate, чтобы использовать порядок вставки в качестве второго элемента для упорядочивания списка:

A=[[1,2],[1,1],[2,2]]

A = [e[1] for e in sorted(enumerate(A), key=lambda x: (x[1][0], x[0]))]
# [[1, 2], [1, 1], [2, 2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...