我试图按字母顺序排列列表中的子列表,并看到.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'
]
对?
试试这个:
for e in lis:
e.sort()
这将对您的外部列表中的所有元素(即每个内部列表)进行就地排序。
如果您需要分类副本,请查看@Mykola Zotko的答案。但是,就地排序更便宜。
您的方法是这样做的:按内部列表的第一个元素对外部列表进行排序。不幸的是,基于第一个元素,外部列表已经排序('. Michels' < '. Snchez' < 'A-Nasser Ansari'
,因为'.'
在ASCII代码中的所有字母之前)。所以你的方法没有改变。
您可以将函数sorted()
映射到列表中的每个子列表:
list(map(sorted, lis))
你有列表的列表,所以简单的解决方案是:
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]