按字母顺序排列列表中的子列表

2024-09-30 23:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试按字母顺序排列列表中的子列表,并且已经看到.sort(key=lambda x: x[0])是有效的here。以下是我的清单:

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'
 ]

是吗?你知道吗


Tags: langdelimalorenzoluigicarloslisarthur
3条回答

您有一个列表,所以简单的解决方案是:

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

结果是:

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

或者,如果需要按某个条件排序,可以使用sorted with key,例如(将给出与第一个解决方案相同的结果):

[sorted(x, key=lambda x:x[0]) for x in lis]

请尝试以下操作:

for e in lis:
  e.sort()

这将对外部列表(即每个内部列表)中的所有元素进行适当的排序。你知道吗

如果您需要排序副本,请查看@Mykola Zotko的答案。不过,就地分拣更便宜。你知道吗

您的方法是这样做的:按内部列表的第一个元素对外部列表进行排序。不幸的是,根据第一个元素,外部列表已经被排序('. Michels' < '. Snchez' < 'A-Nasser Ansari',因为'.'在ASCII代码的所有字母之前)。所以你的方法没有改变什么。你知道吗

您可以将函数sorted()映射到列表中的每个子列表:

list(map(sorted, lis))

相关问题 更多 >