Python'da ne zaman Sözlük, Liste veya Küme kullanılır?


Yanıtlar:


603

Bir listsipariş tutar dictve setyapmayın: siparişi önemsediğinizde, kullanmalısınız list(eğer konteyner seçiminiz bu üç ile sınırlıysa, elbette ;-).

dicther anahtarla bir değer ilişkilendirir listve setsadece değerler içerir: açıkçası çok farklı kullanım durumları.

setöğelerin yıkanabilir olmasını gerektirir, listyapmaz: bu nedenle, yıkanamayan öğeleriniz varsa kullanamazsınız setve bunun yerine kullanmanız gerekir list.

setkopyaları yasaklar, listyapmaz: aynı zamanda önemli bir ayrım. (Bir kereden fazla mevcut öğeler için kopyaları farklı bir sayıya eşleyen bir "çoklu küme" bulunabilir collections.Counter- dictbazı garip bir nedenden dolayı içe aktaramazsanız collectionsveya 2.7 öncesi collections.defaultdict(int)Öğeleri anahtar olarak ve ilişkili değeri sayım olarak kullanarak a olarak python ).

Bir değerin set(veya dictanahtarlar için) üyeliğini kontrol etmek çok hızlıdır (sabit, kısa bir zaman alır), bir listede ise listenin ortalama ve en kötü durumlarda uzunluğu ile orantılı olarak zaman alır. Bu nedenle, yıkanabilir öğeleriniz varsa, sipariş veya kopyaları her iki şekilde umursamayın ve hızlı üyelik kontrolü istiyorsanız, setbundan daha iyidir list.


6
Python
3.7'nin

172
  • Sadece sıralı bir ürün dizisine mi ihtiyacınız var? Bir liste seçin.
  • Zaten sahip olup olmadığınızı bilmeniz mi gerekiyor? belirli bir değer, ancak düzenli olmayan (ve mağaza yinelenenlere gerekmez)? Bir set kullanın.
  • Değerleri anahtarlarla ilişkilendirmeniz gerekiyor, böylece daha sonra verimli bir şekilde (anahtar ile) arama yapabilirsiniz? Sözlük kullan.

30
Bu,
Alex M.'nin

9
Sanırım tam tersi .. Alex oylarını Jon'a bağışlamalı. Bu cevap hemen hemen her şeyi kapsar ve çok daha özlü ve açıktır.
mehmet

Bununla birlikte, bu veri türleri arasındaki zaman karmaşıklığı farkını bilmek isterseniz Alex'in açıklaması daha iyi çalışır
kcEmenike

19

Eşsiz öğelerin sırasız bir koleksiyonunu istiyorsanız, a kullanın set. (Örneğin, bir belgede kullanılan tüm kelimelerin kümesini istediğinizde).

Değişmez sıralı bir öğe listesi toplamak istediğinizde, tuple . (Örneğin, bir kümede öğe olarak kullanmak istediğiniz bir (ad, telefon_numarası) çifti istediğinizde, kümeler öğelerin değişmez olmasını gerektirdiğinden, bir liste yerine bir tuple ihtiyacınız olacaktır).

Değişebilir bir sıralı eleman listesi toplamak istediğinizde a kullanın list. (Örneğin, bir listeye yeni telefon numaraları eklemek istediğinizde: [sayı1, sayı2, ...]).

Anahtarlardan değerlere eşleme yapmak istediğinizde, a tuşunu kullanın dict. (Örneğin, adları telefon numaralarıyla eşleyen bir telefon defteri istediğinizde:) {'John Smith' : '555-1212'}. Bir dikteki anahtarların sırasız olduğunu unutmayın. (Bir diksiyon (telefon rehberi) üzerinden yinelerseniz, tuşlar (adlar) herhangi bir sırada görünebilir).


Uh, tuples hakkında soru sormadı.
habnabit

18
  • Değerlerle eşleşen bir dizi benzersiz anahtarınız olduğunda sözlük kullanın.

  • Sıralı bir öğe koleksiyonunuz varsa bir liste kullanın.

  • Sıralanmamış bir öğe kümesini saklamak için bir küme kullanın.


6

Kısacası, şunu kullanın:

list - sıralı bir öğe sırasına ihtiyacınız varsa.

dict - değerleri tuşlarla ilişkilendirmeniz gerekiyorsa

set - benzersiz öğeleri saklamanız gerekiyorsa.

Detaylı açıklama

Liste

Liste, tipik olarak homojen öğelerin koleksiyonlarını saklamak için kullanılan değiştirilebilir bir dizidir.

Bir liste tüm genel dizi işlemlerini uygular:

  • x in l ve x not in l
  • l[i], l[i:j],l[i:j:k]
  • len(l), min(l),max(l)
  • l.count(x)
  • l.index(x[, i[, j]])- 1. oluşum endeksi xiçinde l(veya sonrasında ive öncesinde jyönelimler belirlenmiştir)

Bir liste ayrıca tüm değiştirilebilir dizi işlemlerini uygular:

  • l[i] = x- öğe iarasında ldeğiştirilirx
  • l[i:j] = t- dilim larasından iiçin jiterable içeriği değiştirilirt
  • del l[i:j] - ile aynı l[i:j] = []
  • l[i:j:k] = t- öğelerinin l[i:j:k]yerinet
  • del l[i:j:k]- öğelerini s[i:j:k]listeden kaldırır
  • l.append(x)- xdizinin sonuna eklenir
  • l.clear()- tüm öğeleri kaldırır l(del ile aynı l[:])
  • l.copy()- sığ bir kopyasını oluşturur l(ile aynı l[:])
  • l.extend(t)veya l += t- liçeriği ile uzanırt
  • l *= n- liçeriği tekrarlanan nsürelerle güncellenir
  • l.insert(i, x)- uçlar xiçine lverdiği dizindei
  • l.pop([i])- öğeyi alır ive ayrıca kaldırırl
  • l.remove(x)- ilk öğeyi x'e eşit olan lyerden kaldırınl[i]
  • l.reverse()- lyerinde öğeleri tersine çevirir

Bir liste yöntemleri yararlanarak yığın olarak kullanılabilir appendve pop.

Sözlük

Sözlük, yıkanabilir değerleri rastgele nesnelere eşler. Sözlük değiştirilebilir bir nesnedir. Sözlükteki ana işlemler, bazı anahtarlarla bir değer depolamak ve anahtarla verilen değeri ayıklamaktır.

Sözlükte, yıkanabilir olmayan anahtar değerleri, yani liste, sözlük veya diğer değiştirilebilir türleri içeren değerler olarak kullanamazsınız.

Ayarlamak

Bir küme, ayrı yıkanabilir nesnelerin sırasız bir koleksiyonudur. Bir küme genellikle üyelik testini, bir diziden yinelenenleri çıkarmayı ve kavşak, birleşim, fark ve simetrik fark gibi matematiksel işlemleri hesaplamayı içerir.


5

Bu, sets'yi kapsamasa da, dicts ve lists'nin iyi bir açıklamasıdır :

Listeler göründükleridir - değerlerin listesi. Her biri sıfırdan başlayarak numaralandırılır - birincisi sıfır, ikincisi 1, üçüncü 2 vb. Olarak numaralandırılır. Listeden değerleri kaldırabilir ve sonuna yeni değerler ekleyebilirsiniz. Örnek: Birçok kedinizin adı.

Sözlükler, adlarının önerdiğine benzer - bir sözlük. Bir sözlükte, bir kelime dizini vardır ve her biri için bir tanım vardır. Python'da, sözcüğe 'anahtar' ve tanımına 'değer' denir. Sözlükteki değerler numaralandırılmaz - adlarının önerdiğine benzer - bir sözlük. Bir sözlükte, bir kelime dizini vardır ve her biri için bir tanım vardır. Bir sözlükteki değerler numaralandırılmaz - belirli bir sırada da değildir - anahtar aynı şeyi yapar. Sözlüklerdeki değerleri ekleyebilir, kaldırabilir ve değiştirebilirsiniz. Örnek: telefon rehberi.

http://www.sthurlow.com/python/lesson06/


4

C ++ için her zaman bu akış şemasını aklımdaydım: Hangi senaryoda belirli bir STL kapsayıcısı kullanıyorum? , Python3 için de benzer bir şey olup olmadığını merak ettim, ama şansım yoktu.

Python için aklınızda bulundurmanız gereken şey: C ++ için tek bir Python standardı yoktur. Bu nedenle, farklı Python tercümanları için büyük farklılıklar olabilir (örn. CPython, PyPy). Aşağıdaki akış şeması CPython içindir.

Ayrıca ben diyagram aşağıdaki veri yapılarını birleştirmek için iyi bir yol buldum: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, ve arrays.

  • OrderedDictve modül dequeüzerinden temin edilebilir collections.
  • heapqheapqmodülden temin edilebilir
  • LifoQueue,, Queueve aynı anda (iş parçacığı) erişim için tasarlanmış modül PriorityQueueüzerinden kullanılabilir queue. (Bir de multiprocessing.Queuevar ama farklılıkları bilmiyorum queue.Queueama süreçlerden eşzamanlı erişim gerektiğinde kullanılması gerektiğini varsayıyorum.)
  • dict, set, frozen_setVe listtabii ki yerleşik olan

Herkes için bu cevabı geliştirebilir ve her açıdan daha iyi bir diyagram sağlayabilirseniz minnettar olurum. Çekinmeyin ve hoş geldiniz. akış şemasıdır

PS: diyagram yed ile yapılmıştır. Graphml dosyası burada


3

İle birlikte listeleri , dicts ve setleri , aynı zamanda başka bir ilginç piton nesneler vardır OrderedDicts .

Sıralı sözlükler tıpkı normal sözlükler gibidir ancak öğelerin yerleştirilme sırasını hatırlarlar. Sıralı bir sözlük üzerinden yineleme yapılırken, öğeler anahtarlarının ilk eklendiği sırada döndürülür.

SıralıDikkatler , anahtarların sırasını korumanız gerektiğinde yararlı olabilir, örneğin belgelerle çalışma: Bir belgedeki tüm terimlerin vektör temsilini istemek yaygındır. Böylece, OrderedDicts kullanarak bir terimin daha önce okunup okunmadığını etkili bir şekilde doğrulayabilir, terimler ekleyebilir, terimler çıkarabilir ve tüm manipülasyonlardan sonra, bunların sipariş edilen vektör temsilini çıkarabilirsiniz.


1

Listeler göründükleridir - değerlerin listesi. Her biri sıfırdan başlayarak numaralandırılır - birincisi sıfır, ikincisi 1, üçüncü 2 vb. Olarak numaralandırılır. Listeden değerleri kaldırabilir ve sonuna yeni değerler ekleyebilirsiniz. Örnek: Birçok kedinizin adı.

Tuples tıpkı listeler gibidir, ancak değerlerini değiştiremezsiniz. İlk önce verdiğiniz değerler, programın geri kalanında takılı kaldığınız değerlerdir. Yine, kolay referans için her değer sıfırdan başlayarak numaralandırılmıştır. Örnek: yılın aylarının isimleri.

Sözlükler , adlarının önerdiğine benzer - bir sözlük. Bir sözlükte, bir kelime dizini vardır ve her biri için bir tanım vardır. Python'da, sözcüğe 'anahtar' ve tanımına 'değer' denir. Sözlükteki değerler numaralandırılmaz - adlarının önerdiğine benzer - bir sözlük. Bir sözlükte, bir kelime dizini vardır ve her biri için bir tanım vardır. Python'da, sözcüğe 'anahtar' ve tanımına 'değer' denir. Bir sözlükteki değerler numaralandırılmaz - belirli bir sırada değildirler - anahtar aynı şeyi yapar. Sözlüklerdeki değerleri ekleyebilir, kaldırabilir ve değiştirebilirsiniz. Örnek: telefon rehberi.


1

Bunları kullandığınızda, referans için yöntemlerinin kapsamlı bir hile sayfasını hazırlarım:

class ContainerMethods:
    def __init__(self):
        self.list_methods_11 = {
                    'Add':{'append','extend','insert'},
                    'Subtract':{'pop','remove'},
                    'Sort':{'reverse', 'sort'},
                    'Search':{'count', 'index'},
                    'Entire':{'clear','copy'},
                            }
        self.tuple_methods_2 = {'Search':'count','index'}

        self.dict_methods_11 = {
                    'Views':{'keys', 'values', 'items'},
                    'Add':{'update'},
                    'Subtract':{'pop', 'popitem',},
                    'Extract':{'get','setdefault',},
                    'Entire':{ 'clear', 'copy','fromkeys'},
                            }
        self.set_methods_17 ={
                    'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
                    'Subtract':{'pop', 'remove','discard'},
                    'Relation':{'isdisjoint', 'issubset', 'issuperset'},
                    'operation':{'union' 'intersection','difference', 'symmetric_difference'}
                    'Entire':{'clear', 'copy'}}

1

Sözlük: Python sözlüğü, anahtar olarak dizin ve değer olarak nesne içeren bir karma tablo gibi kullanılır.

Liste: Bir dizideki nesneleri, dizideki o nesnenin konumuna göre dizine eklenmiş olarak tutmak için bir liste kullanılır.

Küme: Küme, bir nesnenin kümede var olup olmadığını söyleyebilen işlevlere sahip bir koleksiyondur.

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.