2016-05-17 8 views
2

Warum wird die Elementprüfung zwischen einer Liste und einer Menge anders gehandhabt?Warum wird die Elementprüfung zwischen Liste und Menge unterschiedlich gehandhabt?

Lassen Sie mich folgendes Beispiel:

'a' in ['aa'] kehrt False

'a' in ('aa') kehrt True

+2

'('aa')' ist eine Zeichenfolge in Klammern, es ist weder eine Menge noch ein Tupel. Also ist das Zeichen "a" in "aa" –

+0

'('aa') == 'aa'' Sie müssen' ('aa',) 'für ein einzelnes Tupel verwenden. – styvane

+0

Einzelelement-Tupel sollten am Ende ein Komma haben. Zum Beispiel, '('aa',)' oder einfach ''aa',' – thefourtheye

Antwort

3

Wenn Sie ('aa') schreiben Sie einfach nur einen String erstellen, so ist es offensichtlich, dass in Zeichen überprüfen wird und Bewertung als True. Sie können dies überprüfen mit

>>> x = ('aa') 
>>> print(type(x)) 
<class 'str'> 

Wie in der Dokumentation gesehen tuple syntax, um ein einzelnes Element zu erstellen Tupel Sie ein Komma erforderlich, das heißt ('aa',). In diesem Fall führt die Überprüfung auf 'a' in Ihrem Tupel zu False wie erwartet.

Wenn Sie tatsächlich schaffen einen Satz mit

x = set('aa') 

das ist, was ich denke, Sie haben, ist ein Satz mit den einzigartigen Charakteren in Ihrem String als Elemente erstellt, da Ihre übergebenen String als eine gesehen iterable für die Menge, um Elemente aus (Zeichen) zu erhalten. Daher wird Ihr Satz {'a'}, also wird in als True ausgewertet. Im Gegenteil, wenn Sie einen Satz mit Satz Literalsyntax als False

x = {'aa'} 

ein Satz mit Ihrem einzigen String erstellt 'aa' und in evaluieren erstellen. Es hängt also davon ab, wie Sie eine Menge von 'aa' initialisieren.

>>> set('dog') 
{'d', 'g', 'o'} 
>>> {'dog'} 
{'dog'} 
0

Da ('aa') ist kein Tupel es Zeichenfolge ist. Der Tuple-Erstellungsoperator ist ,. Also in Ihrem Anwendungsfall Befehl 'a' in ('aa') prüft tatsächlich Wetter 'a' char in 'aa' Zeichenfolge, was wahr ist.

Äquivalente Operation mit Tupel wäre 'a' in ('aa',), die falsch ist.

Weitere Informationen finden Sie unter python doc#tuple und implicit line joining.

Verwandte Themen