Python veri yapısı sıralama listesi alfabetik olarak


160

Python veri yapısı konusunda biraz kafam karıştı; (),, []ve {}. Basit bir listeyi sıralamaya çalışıyorum, muhtemelen sıralamakta başarısız olduğum veri türünü tanımlayamıyorum.

Listem basit: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Benim sorum bu ne tür bir veri ve kelimeleri alfabetik olarak nasıl sıralayacağım?


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

[]yerleşik veri türünü kapsar list(bkz. tutorialspoint.com/python/python_lists.htm ). Listeler yalnızca değer gruplarıdır (başka yinelenebilir nesneler (iç içe listeler içerebilir). ()yerleşkeyi çevreler tuple. Değişmezler (değiştirilemezler). (bkz. tutorialspoint.com/python/python_tuples.htm ). Ve {}yerleşkeyi kuşatır dictionary. Bir 'anahtarın' kelime olacağı ve 'değerin' tanımı olduğu bir sözlükle (kelimeler için) paraleldir. (bkz. tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Yanıtlar:


232

[]bir listeyi , ()bir demet ve {}bir sözlüğü belirtir . Python'da programlamanın temelleri olduğu için resmi Python öğreticisine göz atmalısınız .

Sahip olduğunuz dizelerin bir listesi. Bunu şu şekilde sıralayabilirsiniz:

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

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

Gördüğünüz gibi, büyük harfle başlayan kelimeler küçük harfle başlayanlara göre tercih edilir. Onları bağımsız olarak sıralamak istiyorsanız, bunu yapın:

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

Bunu yaparak listeyi ters sırada da 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']

Lütfen dikkat: Python 3 ile çalışıyorsanız, strokunabilir metin içeren her dize için doğru veri türüdür. Hala Python 2 ile çalışmak gerekiyorsa Ancak, o zaman veri türüne sahip Unicode dizeleri ile anlaşma olabilir unicodePython 2'de değil, str. Böyle bir durumda, unicode dizelerinizin bir listesi varsa, key=unicode.lowerbunun yerine yazmalısınız key=str.lower.


Bir pymongo ikinci örneği kullanarak find_one()bir MongoDB veritabanından sonucu, ben hata alıyorum: descriptor 'lower' requires a 'str' object but received a 'unicode'. Sonuç bir dizeler dizisi ve bunun gibi hayata geçerli: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Bunu nasıl çözeceğini bilen var mı?
user1063287

@ user1063287 Geç yanıt verdiğim için üzgünüm. Sizin durumunuzda key=unicode.lowerbunun yerine yazmanız gerekir key=str.lower. Bunun nedeni, bayt dizeleriyle değil, unicode dizeleriyle uğraşmanızdır. Bu konuda daha fazla bilgi için, özellikle Python 2 ve 3 arasındaki ilgili farklılıklar için lütfen resmi Unicode NASIL belgesine bakın
pemistahl

32

Python, sortedsize beslediğiniz herhangi bir yinelenebilir bir listeden (bir liste ( [1,2,3]); bir dict ( {1:2,3:4}her ne kadar tuşların sıralı bir listesini döndürecek olsa da {1,2,3,4) bir set ( ) olarak adlandırılan yerleşik bir işleve sahiptir . veya bir tuple ( (1,2,3,4))).

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

Listeler ayrıca sort, sıralamayı yerinde gerçekleştirecek bir yönteme sahiptir (x.sort (), None döndürür ancak x nesnesini değiştirir).

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

Her ikisi de key, neyin sıralanacağını değiştirmek için kullanabileceğiniz bir çağrılabilir (işlev / lambda) olması gereken bir argüman alır .
Örneğin, (key,value)değere göre sıralanmış bir diksiyondan -çiftlerin listesini almak için aşağıdaki kodu kullanabilirsiniz:

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

12

Bir python listesi ile uğraşıyorsunuz ve bunu sıralamak bunu yapmak kadar kolay.

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

11

Yerleşik işlevi kullanabilirsiniz sorted.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])

4

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


1
Bu Ruby için bir yorum mu?
allanberry

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']
>>> 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.