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:
1Ve Truedengi ve çiftleri olarak kabul vardır. Aynı şekilde 0ve Falseeş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 == 1ve 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, Falseve 0olduğu gibi, eşdeğer kabul edilmektedir Trueve 1. Çünkü Trueve 1aynı 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 set1ilk set olarak kullanılır, böylece 1ortaya çıkan sete gireriz. İkinci sette, Truebirinci sette Trueolduğ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 .