Сортировка подсписков в списке по алфавиту - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь упорядочить подсписки в списке по алфавиту и увидел, что .sort(key=lambda x: x[0]) работает здесь .Вот мой список:

lis = [['. Michels',
        'Lorenzo Petroli',
        'Carlos Arthur Lang Lisba',
        'Fernanda Gusmo de Lima Kastensmidt',
        'Luigi Carro'],
       ['. Snchez', 'M. Rincn'],
       ['A-Nasser Ansari', 'Mohamed Abdel-Mottaleb']]
lis.sort(key=lambda x: x[0])

Теперь я звоню lis, и кажется, что с первой записью ничего не произошло:

[['. Michels',
  'Lorenzo Petroli',
  'Carlos Arthur Lang Lisba',
  'Fernanda Gusmo de Lima Kastensmidt',
  'Luigi Carro'],
 ['. Snchez', 'M. Rincn'],
 ['A-Nasser Ansari', 'Mohamed Abdel-Mottaleb']]

, которая должна быть

['. Michels',
 'Carlos Arthur Lang Lisba',
 'Fernanda Gusmo de Lima Kastensmidt',
 'Lorenzo Petroli',
 'Luigi Carro'
 ]

верно?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Вы можете сопоставить функцию sorted() каждому подсписку в списке:

list(map(sorted, lis))
0 голосов
/ 27 февраля 2019

у вас есть список списка, поэтому простое решение:

lis = [['. Michels',
        'Lorenzo Petroli',
        'Carlos Arthur Lang Lisba',
        'Fernanda Gusmo de Lima Kastensmidt',
        'Luigi Carro'],
       ['. Snchez', 'M. Rincn'],
       ['A-Nasser Ansari', 'Mohamed Abdel-Mottaleb']]
<b>[sorted(x) for x in lis]</b>

и результат, который вы получите:

[['. Michels',
  'Carlos Arthur Lang Lisba',
  'Fernanda Gusmo de Lima Kastensmidt',
  'Lorenzo Petroli',
  'Luigi Carro'],
 ['. Snchez', 'M. Rincn'],
 ['A-Nasser Ansari', 'Mohamed Abdel-Mottaleb']]

или если вам нужно отсортировать по какому-то условиюможно использовать отсортированный с key, пример (даст тот же результат, что и первое решение):

[sorted(x, key=lambda x:x[0]) for x in lis]
0 голосов
/ 27 февраля 2019

Попробуйте вместо этого:

for e in lis:
  e.sort()

Это позволит отсортировать все элементы вашего внешнего списка (т.е. каждый внутренний список) на месте.

Если вам нужны отсортированные копии, посмотритена ответ @Mykola Zotko.Однако сортировка на месте обходится дешевле.

Вместо этого ваш подход сделал следующее: отсортируйте внешний список по первым элементам внутренних списков.К сожалению, по первым элементам внешний список уже отсортирован ('. Michels' < '. Snchez' < 'A-Nasser Ansari', потому что '.' стоит перед всеми буквами в коде ASCII).Так что ваш подход ничего не изменил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...