piton

2015-12-10 23 views
6

listenin listesini sıralama Ben gibi Python bir listesi var - Öyle mi sıralamak istiyorumpiton

[['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 

aşağıdaki -

[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 

cevap

10

Önce sırala bireysel öğeler listelerinde ardından sıralama sıralanmış listelerin uzunluğu ve sonra gerçek elemanların kendisi, bu gibi, bu

>>> data = [['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 
>>> sorted((sorted(item) for item in data), key=lambda x: (len(x), x)) 
[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 
Bu, dizeler listesi olduğu için çalışır. Varsayılan olarak sözlüksel olarak sıralanabilirim. Durumunuzda, iç listeler sıralandığında, dış listeler ilk önce listenin uzunluğuna göre sıralanır ve eğer aynı ise, o zaman dizenin asıl öğeleri karşılaştırma için kullanılır.

Bu, adım adım anlaşılabilir. Bu

>>> [sorted(item) for item in data] 
[['C'], ['B'], ['A'], ['B', 'C'], ['A', 'B'], ['A', 'C']] 

sonuçları sıralama ilk bireysel unsurlar Şimdi, ilk küçükten büyüğe uzunluğuna dayalı bu sıralamak gerekir ve daha sonra elemanlar da sıralanmalıdır. Yani, lambda x: (len(x), x) dış sıralama işlevine özel bir işlev iletiyoruz.

+0

Mükemmel! şapka altında başka bir hile - tuşu, her bir liste öğesinden bir karşılaştırma anahtarını çıkarmak için kullanılan "bir" ifadenin bir işlevini belirtir. – SIslam