2012-12-25 99 views
84

Python'daki veri yapısıyla ilgili biraz kafam karışmış; (), [] ve {}. Basit bir listeyi ayırmaya çalışıyorum, muhtemelen veriyi tanımlayamadığım için veriyi tanımlayamıyorum. ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']Python veri yapısı sıralama listesi alfabetik olarak

Sorum şudur ne tür veri nedir ve nasıl alfabetik kelimeleri sıralamak için:

Listem basit mi?

+0

Listenizi sıralamak isterseniz, "list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'kullanabilirsiniz. Whim ',' Intrigue '] list.sort() yazdırma listesi ". – kannanrbk

+0

'[]', yerleşik veri türünü 'list '(bkz. Http://www.tutorialspoint.com/python/python_lists.htm) içerir. Listeler sadece değerler grubudur (diğer yinelenen nesneler içerebilirler - yani yuvalanmış listeler). '()', yerleşik tuple'yı sarar. Değişmezler (değiştirilemez). (bkz. http://www.tutorialspoint.com/python/python_tuples.htm). Ve '{}' yerleşik sözlüğü içerir. Bir sözlük ile paralellikler (kelimeler için), burada bir 'anahtar' kelimesi olur ve 'değer' tanımıdır. (bkz. http://www.tutorialspoint.com/python/python_dictionary.htm). –

cevap

124

[] bir list, () bir tuple belirtmektedir ve {} bir dictionary anlamlarına gelmektedir. Python'da programlamanın temelleri olan official Python tutorial'a bir göz atmalısınız.

Elinizde dize listesi var. Böyle sıralayabilir: Gördüğünüz gibi, büyük harfle başlayan kelimeler küçük harfle başlayan olanlar arasında öncelik almak

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 

In [2]: sorted(lst) 
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute'] 

. Bağımsız olarak sıralamak istiyorsanız, şunu yapın:

In [4]: sorted(lst, key=str.lower) 
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim'] 

Ayrıca böyle yaparak ters sırada listeyi sıralayabilirsiniz:

In [12]: sorted(lst, reverse=True) 
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux'] 

In [13]: sorted(lst, key=str.lower, reverse=True) 
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute'] 

unutmayın: Eğer Python 3 ile çalışıyorsanız, daha sonra str, insan tarafından okunabilir metin içeren her dize için doğru veri türüdür. Ancak, hala Python 2 ile çalışmanız gerekiyorsa, Python 2'de unicode veri türüne sahip olan ve str değil, unicode dizeleriyle uğraşabilirsiniz. Böyle bir durumda, bir unicode dizeleri listeniz varsa, key=str.lower yerine key=unicode.lower yazmanız gerekir. bu sadece bir dönecektir rağmen, bir dict ({1:2,3:4};

+0

Bir MongoDB veritabanından alınan bir pymongo 'find_one()' sonucundaki ikinci örneği kullanarak, hata alıyorum: 'descriptor 'lower', 'str' nesnesini gerektirir, ancak bir 'unicode' aldı. Sonuç bir dizi dizedir ve şu şekilde uygulanır: 'results ['keywords'] = sıralanmış (anahtar kelimeler ['keywords'], key = str.lower)'. Bunu nasıl çözeceğini bilen var mı? – user1063287

+0

@ user1063287 Geç yanıtım için özür dilerim. Sizin durumunuzda, 'key = str.lower' yerine' key = unicode.lower' yazmanız gerekir. Bunun nedeni, bayt dizeleri değil, unicode dizeleriyle uğraşmanızdır. Bu konuda daha ayrıntılı bilgi için lütfen resmi [Unicode NASIL] 'a (https://docs.python.org/3/howto/unicode.html) bakın. Özellikle Python 2 ve 3 arasındaki farklar için. – pemistahl

6

Bir python listesiyle uğraşmaktasınız ve sıralama bunu yapmak kadar kolaydır.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
my_list.sort() 
7

Sen yerleşik kullanabilirsiniz sorted fonksiyonu.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']) 
3
>>> a =() 
>>> type(a) 
<type 'tuple'> 
>>> a = [] 
>>> type(a) 
<type 'list'> 
>>> a = {} 
>>> type(a) 
<type 'dict'> 
>>> a = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort() 
>>> a 
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute'] 
>>> 
19

Python herhangi böyle bir listenin ([1,2,3]) olarak (beslemek iterable dan size sıralı bir liste verecektir sorted denilen yerleşik bir işlevi vardır sıralanmış tuşların listesi; bir dizi ({1,2,3,4);. ya tuple ((1,2,3,4)))

>>> x = [3,2,1] 
>>> sorted(x) 
[1, 2, 3] 
>>> x 
[3, 2, 1] 

Listeler de yerinde tür gerçekleştirecek bir sort yöntemine sahip

.

Her ikisi de sıralamak için değiştirmek için kullanabileceğiniz bir callable (function/lambda) olmalıdır bir key bağımsız değişkeni al.Örneğin
, aşağıdaki kodu kullanabilirsiniz değerine göre sıralanır bir dict gelen (key,value) çiftlerine bir listesini almak için:

>>> x = {3:2,2:1,1:5} 
>>> sorted(x.items(), key=lambda kv: kv[1]) # Items returns a list of `(key,value)`-pairs 
[(2, 1), (3, 2), (1, 5)] 
+0

@ jwpat7, evet . Daha iyi? –

+0

Gerçekten nasıl çalıştığını açıkladığınız için teşekkürler. Çok yararlı. – joshmcode

3

ListName.sort() alfabetik sıralanır. Öğelerin sırasını tersine çevirmek için reverse=False/True köşeli parantezler ekleyebilirsiniz: ListName.sort(reverse=False)

+0

Bu bir Ruby için bir yorum mu? – allanberry