按字母顺序对列表中的子列表进行排序

时间:2019-02-27 12:45:28

标签: python list

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

对吗?

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

for e in lis:
  e.sort()

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

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

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

答案 1 :(得分:2)

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

list(map(sorted, lis))

答案 2 :(得分:1)

您有列表的列表,所以简单的解决方法是:

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

或者如果您需要按某种条件进行排序,则可以使用key示例进行排序(与第一种解决方案的结果相同):

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