2013-02-05 11 views
8

Wiem, że jeśli chcę uzyskać przecięcie dwóch zestawów (lub frozensets), powinienem użyć znaków ampersand i &. Z ciekawości próbowałem użyć słowa "i"Zachowanie "i" w zestawach w Pythonie

a = set([1,2,3]) 
b = set([3,4,5]) 
print(a and b) #prints set([3,4,5]) 

Jestem tylko ciekawy dlaczego? co to oznacza and w przypadku korzystania z list?

+3

[Czym jest prawda w Pythonie?] (Http://docs.python.org/2/library/stdtypes.html#truth-value-testing) –

+0

@thewolf: Dobry dodatek; pozwól mi dodać ten link również do odpowiedzi. – abarnert

Odpowiedz

14

x and y traktuje wszystkie wyrażenia x i y jako wartości logiczne. Jeśli x ma wartość false, zwraca wartość x. W przeciwnym razie zwraca y. Aby uzyskać szczegółowe informacje, patrz the docs.

Zarówno set s (jak w twoim przykładzie) i list s (jak w twoim pytaniu) są fałszywe wtedy i tylko wtedy, gdy są puste. Ponownie, zobacz the docs, aby uzyskać szczegółowe informacje.

Więc x and y zwróci x, jeśli jest pusty, a y w przeciwnym razie.

+0

Ładne i zwięzłe stwierdzenie –

+0

@JonClements: W rzeczywistości, patrząc na dokumenty, są jeszcze ładniejsze i bardziej zwięzłe. 'x i y' są zdefiniowane jako" jeśli 'x' jest fałszywe, to' x', else 'y'". To naprawdę wszystko, co trzeba powiedzieć. – abarnert

+0

Dziękuję. Tylko czekanie 10 minut na zaakceptowanie odpowiedzi :) – yahiaelgamal

Powiązane problemy