Aşağıdaki birliklerdeki iki kümenin sırasını değiştirdiğimde nasıl farklı sonuçlar alıyorum?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
Aşağıdaki birliklerdeki iki kümenin sırasını değiştirdiğimde nasıl farklı sonuçlar alıyorum?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
Yanıtlar:
1
Ve True
dengi ve çiftleri olarak kabul vardır. Aynı şekilde 0
ve False
eşdeğerdir:
>>> 1 == True
True
>>> 0 == False
True
Birden çok eşdeğer değerle karşılaşıldığında, kümeler ilkini görünür tutar:
>>> {0, False}
{0}
>>> {False, 0}
{False}
Onlara farklı muamele edilmesini sağlamak için onları bir (value, type)
çift halinde saklamanız yeterlidir:
>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
(True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()
Değerleri farklı kılmanın bir başka yolu da onları dizeler olarak saklamaktır:
>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()
Umarım bu, gizemi ortadan kaldırır ve ileriye giden yolu gösterir :-)
Yorumlardan kurtarıldı:
Bu, türler arası eşdeğerliği kırmak için standart tekniktir (yani 0.0 == 0
, True == 1
ve Decimal(8.5) == 8.5)
. Teknik, Python 2.7'nin normal ifade modülünde, unicode regex'lerin, aksi takdirde eşdeğer str regex'lerden farklı bir şekilde önbelleğe alınmasını zorlamak için kullanılır. Bu teknik ayrıca Python'da da kullanılır. Yazılan parametre doğru olduğunda functools.lru_cache () için 3.
OP'nin varsayılan eşdeğerlik ilişkisi dışında bir şeye ihtiyacı varsa, o zaman bazı yeni ilişkilerin tanımlanması gerekir. Kullanım durumuna bağlı olarak, dizeler için büyük / küçük harfe duyarsızlık, unicode için normalleştirme, görsel görünüm (farklı görünen şeyler farklı kabul edilir), kimlik (iki farklı nesne eşit kabul edilmez), bir değer / tür çifti veya başka bir şey olabilir. eşdeğerlik ilişkisini tanımlayan işlev. OP'lerin özel örneği göz önüne alındığında, ya türe göre ayrım ya da görsel ayrım beklediği görülmektedir.
Python'da, False
ve 0
olduğu gibi, eşdeğer kabul edilmektedir True
ve 1
. Çünkü True
ve 1
aynı değer olarak kabul edildiğinden, bir kümede aynı anda yalnızca biri bulunabilir. Hangisi sete eklendikleri sıraya bağlıdır. İlk satırda set1
ilk set olarak kullanılır, böylece 1
ortaya çıkan sete gireriz. İkinci sette, True
birinci sette True
olduğu için sonuca dahil edilir.
Eğer bakarsak https://docs.python.org/3/library/stdtypes.html#boolean-values bölüm 4.12.10. Boole Değerleri:
Boole değerleri, False ve True sabit nesneleridir . Doğruluk değerlerini temsil etmek için kullanılırlar (diğer değerler de yanlış veya doğru olarak kabul edilebilir). Sayısal bağlamlarda (örneğin bir aritmetik işleç için bağımsız değişken olarak kullanıldığında) , sırasıyla 0 ve 1 tam sayıları gibi davranırlar .