Yanıtlar:
Bir list
sipariş tutar dict
ve set
yapmayın: siparişi önemsediğinizde, kullanmalısınız list
(eğer konteyner seçiminiz bu üç ile sınırlıysa, elbette ;-).
dict
her anahtarla bir değer ilişkilendirir list
ve set
sadece değerler içerir: açıkçası çok farklı kullanım durumları.
set
öğelerin yıkanabilir olmasını gerektirir, list
yapmaz: bu nedenle, yıkanamayan öğeleriniz varsa kullanamazsınız set
ve bunun yerine kullanmanız gerekir list
.
set
kopyaları yasaklar, list
yapmaz: 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
- dict
bazı garip bir nedenden dolayı içe aktaramazsanız collections
veya 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 dict
anahtarlar 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, set
bundan 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 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 x
içinde l
(veya sonrasında i
ve öncesinde j
yönelimler belirlenmiştir)Bir liste ayrıca tüm değiştirilebilir dizi işlemlerini uygular:
l[i] = x
- öğe i
arasında l
değiştirilirx
l[i:j] = t
- dilim l
arasından i
için j
iterable 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ırl.append(x)
- x
dizinin 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
- l
içeriği ile uzanırt
l *= n
- l
içeriği tekrarlanan n
sürelerle güncellenirl.insert(i, x)
- uçlar x
içine l
verdiği dizindei
l.pop([i])
- öğeyi alır i
ve ayrıca kaldırırl
l.remove(x)
- ilk öğeyi x'e eşit olan l
yerden kaldırınl[i]
l.reverse()
- l
yerinde öğeleri tersine çevirirBir liste yöntemleri yararlanarak yığın olarak kullanılabilir append
ve 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, set
s'yi kapsamasa da, dict
s ve list
s'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
.
OrderedDict
ve modül deque
üzerinden temin edilebilir collections
.heapq
heapq
modülden temin edilebilirLifoQueue
,, Queue
ve aynı anda (iş parçacığı) erişim için tasarlanmış modül PriorityQueue
üzerinden kullanılabilir queue
. (Bir de multiprocessing.Queue
var ama farklılıkları bilmiyorum queue.Queue
ama süreçlerden eşzamanlı erişim gerektiğinde kullanılması gerektiğini varsayıyorum.)dict
, set
, frozen_set
Ve list
tabii 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.