Der Tilde-Operator in Python

Was ist der Gebrauch des tilde Betreibers in Python?

Eine Sache, die ich mir vorstellen kann, ist etwas in beiden Seiten eines Strings oder einer Liste, wie z. B. überprüfen, ob ein String palindromisch ist oder nicht:

def is_palindromic(s): return all(s[i] == s[~i] for i in range(len(s) / 2)) 

Irgendeine andere gute Verwendung?

  • Wie implementiert Python den modulo-Betrieb?
  • Python Logischer Betrieb
  • Wann unterscheidet sich "i + = x" von "i = i + x" in Python?
  • Gibt es einen "nicht gleich" Betreiber in Python?
  • Python "in" Betreiber funktioniert nicht richtig?
  • Warum ist ''> 0 True in Python?
  • 3 Solutions collect form web for “Der Tilde-Operator in Python”

    Es ist ein unartiger Operator (ein einziges Argument), das von C ausgeliehen wird, wo alle Datentypen nur unterschiedliche Wege zur Interpretation von Bytes sind. Es ist die "invert" oder "komplement" Operation, bei der alle Bits der Eingangsdaten umgekehrt werden.

    In Python, für ganze Zahlen, werden die Bits der Doppelkomplementdarstellung der Ganzzahl umgekehrt (wie in b <- b XOR 1 für jedes einzelne Bit) und das Ergebnis wieder als eine Doppelkomplement-Ganzzahl interpretiert. Also für ganze Zahlen ist ~x äquivalent zu (-x) - 1 .

    Die benannte Form des Operators ist als operator.invert . Um diesen Operator in deiner eigenen Klasse zu unterstützen, gib ihm eine __invert__(self) Methode.

     >>> import operator >>> class Foo: ... def __invert__(self): ... print 'invert' ... >>> x = Foo() >>> operator.invert(x) invert >>> ~x invert 

    Jede Klasse, in der es sinnvoll ist, eine "Ergänzung" oder "Inverse" einer Instanz zu haben, die auch eine Instanz derselben Klasse ist, ist ein möglicher Kandidat für den Invertoperator. Allerdings kann die Überlastung des Betreibers zu Verwirrung führen, wenn sie missbraucht wird. __invert__ Sie also sicher, dass es wirklich sinnvoll ist, dies zu tun, bevor Sie eine __invert__ Methode an Ihre Klasse liefern. (Beachten Sie, dass Byte-Strings [ex: '\xff' ] diesen Operator nicht unterstützen, obwohl es sinnvoll ist, alle Bits eines Byte-Strings zu invertieren.)

    ~ Ist der bitweise Komplementoperator in Python, der im wesentlichen -x - 1 berechnet

    So würde ein Tisch aussehen

     i ~i 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 

    Also für i = 0 würde es s[0] mit s[len(s) - 1] , für i = 1 , s[0] mit s[len(s) - 2] .

    Wie für Ihre andere Frage, kann dies für eine Reihe von bitweise Hacks nützlich sein.

    Abgesehen davon, dass ein bitweise Ergänzung Operator, ~ kann auch helfen, einen booleschen Wert zurückzukehren, obwohl es nicht die herkömmliche bool Typ hier, sondern Sie sollten numpy.bool_ .


    Dies wird in,

     import numpy as np assert ~np.True_ == np.False_ 

    Das Umkehren des logischen Wertes kann manchmal nützlich sein, zB unterhalb des Operators wird verwendet, um Ihren Datensatz zu reinigen und Ihnen eine Spalte ohne NaN zurückzugeben.

     from numpy import NaN import pandas as pd matrix = pd.DataFrame([1,2,3,4,NaN], columns=['Number'], dtype='float64') # Remove NaN in column 'Number' matrix['Number'][~matrix['Number'].isnull()] 
    Python ist die beste Programmiersprache der Welt.