首页 > 解决方案 > 按字母顺序对列表中的子列表进行排序

问题描述

我正在尝试按字母顺序对列表中的子列表进行排序,并且已经看到它.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'
 ]

正确的?

标签: pythonlist

解决方案


试试这个:

for e in lis:
  e.sort()

这将就地对外部列表(即每个内部列表)的所有元素进行排序。

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

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


推荐阅读