Bunun neden geçerli olduğunu bilmek istiyorum:
set(range(10)) - set(range(5))
ancak bu geçerli değil:
set(range(10)) + set(range(5))
"+" Hem kesişim hem de birleşme anlamına gelebildiği için mi?
Bunun neden geçerli olduğunu bilmek istiyorum:
set(range(10)) - set(range(5))
ancak bu geçerli değil:
set(range(10)) + set(range(5))
"+" Hem kesişim hem de birleşme anlamına gelebildiği için mi?
~
bir ikili operatör olsaydı , o zaman |
için + birleşim ve ~
çok daha dengeli olan fark için sahip olabilirsiniz .
Yanıtlar:
Python kümelerinin +
işleç için bir uygulaması yoktur .
|
Set birleşimi ve &
set kesişimi için kullanabilirsiniz .
Kümeler -
, küme farkı olarak uygular . ^
Simetrik set farkı için de kullanabilirsiniz (yani, sadece bir sette görünen ancak her iki sette de görünmeyen nesnelerle yeni bir set döndürecektir).
Python |
bunun yerine kullanmayı seçti +
çünkü set birliği, boole ayrışması ile yakından ilgili bir kavramdır; Bit vektörleri (python'da sadece int
/ şeklindedir long
) bu işlemi bir dizi boole değerinde tanımlar ve "bitsel veya" olarak adlandırır. Aslında bu işlem küme birliğine o kadar benzer ki, ikili tamsayılar bazen "Bit kümeleri" olarak da adlandırılır, burada kümedeki elemanlar doğal sayılar olarak alınır.
Çünkü int
önce operatörler grubu gibi tanımlar |
, &
ve ^
yeni için, doğal olarak set
türü aynı arayüzü.
Küme teorisinde + sembolü normalde iki kümenin ayrık birleşimini gösterir . A ve B kümelerse, ayrık birleşimleri küme olarak tanımlanır
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
yani, ayrık birleşimi oluşturmak için, A'nın tüm öğelerini ve B'nin tüm öğelerini farklı etiketlerle işaretleriz (örnekte 1 ve 2 sayılarını kullandım, ancak herhangi iki farklı "şey" işi yapar) ve sonra ortaya çıkan iki kümenin birleşimi. Yukarıdaki örnekte, olağan matematiksel gösterime daha benzer hale getirmek için set birleşimi için 'U' kullandım; aşağıda Python gösterimini kullanıyorum, yani '|' birlik için ve kesişim için '&'.
A ve B ayrıksa, A + B'nin A | ile 1'e 1 yazışması vardır. B. Değilse, A ve B'deki tüm ortak elemanlar A + B'de iki kez görünür: bir kez (x, 1) ve bir kez (x, 2) olarak.
Bu nedenle, '+' sembolünün küme işlemi olarak oldukça iyi belirlenmiş bir anlamı olduğundan, Python'un bu sembolü set birleşimi veya kesişim için kullanmadığını çok tutarlı buluyorum. Muhtemelen Python tasarımcıları set operatörlerini seçerken bunu akıllarında tutmuşlardır.
|
operatörü ayarlı birlikler için aşırı yüklediğini anladım, ancak Guido'nun neden operatörü set bağlantıları için aşırı yüklemekten kaçındığını anlayamadım +
. Sonuçta, bunu yapmak, +
operatörün liste eklemeleri için aşırı yüklenmesi ile ortogonaliteyi koruyacaktı . Python'un ayırt edici özelliği matematiksel gösterime uygunluk olduğu için (örneğin, j
karmaşık sayıların karmaşık bileşenini belirtmek), Guido'nun meraklı seçimi nihayet mantıklıdır.
Elbette, eskiden bir birliktelik yapabilirlerdi +
, ancak yine de kesişme için bir sembole ihtiyaç duyacaklardı. |
birleşim &
için kesişme için simetriktir ve bu nedenle daha iyi bir seçim yapar.
Çünkü |
birlik demektir ve &
kesişme demektir. Aynı işlev için birden fazla operatör eklemenin açıkça bir nedeni yoktur.
Kullanım nedenleri |
ve &
muhtemelen bitsel işlemlere geri dönüyor. Bir kümeyi bir sayıdaki bitler olarak temsil ediyorsanız, bunlar birleştirmek ve kesişmek için kullanacağınız işleçlerdir.
+
basit, birliğe bağlı değildir ve -
farklılığı belirlemektir.
Çünkü küme farkı çok kullanışlı ve yaygın olarak bilinen bir kavramdır, ancak (evrensel olarak kullanılan) "küme toplama" kavramı yoktur.
+
olarak tanımlanır . Bazıları bunu simetrik farklılık için kullanır . Her iki durumda da, onu kullanan herhangi bir kağıt ona ya başka bir şey diyor ya da önce onu tanımlıyor.
|
birlik demektir. Ne soruyorsun?