Yanıtlar:
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.
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).
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.
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 ll[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ştirilirxl[i:j] = t- dilim larasından iiçin jiterable içeriği değiştirilirtdel l[i:j] - ile aynı l[i:j] = []l[i:j:k] = t- öğelerinin l[i:j:k]yerinetdel l[i:j:k]- öğelerini s[i:j:k]listeden kaldırırl.append(x)- xdizinin sonuna eklenirl.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ırtl *= n- liçeriği tekrarlanan nsürelerle güncellenirl.insert(i, x)- uçlar xiçine lverdiği dizindeil.pop([i])- öğeyi alır ive ayrıca kaldırırll.remove(x)- ilk öğeyi x'e eşit olan lyerden kaldırınl[i]l.reverse()- lyerinde öğeleri tersine çevirirBir liste yöntemleri yararlanarak yığın olarak kullanılabilir appendve pop.
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.
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.
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.
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 edilebilirLifoQueue,, 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 olanHerkes için bu cevabı geliştirebilir ve her açıdan daha iyi bir diyagram sağlayabilirseniz minnettar olurum. Çekinmeyin ve hoş geldiniz.

PS: diyagram yed ile yapılmıştır. Graphml dosyası burada
İ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.
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.
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'}}
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.