programing

Python의 tilde 연산자

itsource 2023. 1. 27. 21:51
반응형

Python의 tilde 연산자

Python에서 tilde 연산자의 용도는 무엇입니까?

한 가지 생각할 수 있는 것은 문자열 또는 목록의 양쪽에 있는 작업을 수행하는 것입니다. 예를 들어 문자열이 회문인지 여부를 확인하는 것입니다.

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

다른 좋은 방법은 없나요?

C에서 빌린 단일 연산자(1개의 인수를 사용)로, 모든 데이터 유형이 바이트를 해석하는 서로 다른 방식입니다.입력 데이터의 모든 비트가 반전되는 "반전" 또는 "완전" 연산입니다.

Python에서는 정수의 경우 정수의 2개 보완 표현의 비트가 반전됩니다(와 같습니다).b <- b XOR 1각 개별 비트에 대해) 그리고 그 결과는 다시 두 개의 정수로 해석됩니다.는요?~x (-x) - 1.

「 」의 .~는 연음음음음음음음음음음 operator operator operator operator 로 제공됩니다.operator.invert의 클래스에서하려면 , 「이 연산자에 」를 __invert__(self)★★★★★★ 。

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

같은 클래스의 인스턴스이기도 한 인스턴스의 "완성" 또는 "역"을 갖는 것이 의미가 있는 클래스는 인버트 연산자의 가능한 후보입니다.단, 오퍼레이터의 과부하로 인해 오용될 경우 혼란이 발생할 수 있습니다. 따라서 이 작업을 수행하는 것이 실제로 타당하다는 것을 확인한 후__invert__[ex: (바이트 스트링)]에 주의해 '\xff'바이트 문자열의 모든 비트를 반전시키는 것이 의미가 있는 경우에도 이 연산자는 지원되지 않습니다.)

~python의 bitwise complement 연산자로, 기본적으로 계산됩니다.-x - 1

그래서 테이블은 이렇게 생겼을 거예요.

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

★★★★★의 경우i = 0가 되다s[0]s[len(s) - 1]의 경우, 의 경우i = 1,s[1]s[len(s) - 2].

다른 질문에 대해서는, 이것은 다양한 비트 단위의 해킹에 도움이 됩니다.

만 아니라 비트의 보완 연산자일 수도 .~또한 부울 값을 되돌리는 데 도움이 될 수 있습니다.단, 일반적인 값은 아닙니다.bool입력해 , 라고 하는 것이 , 「어느 쪽인가」라고 하는 것을 합니다.numpy.bool_.


이것은 에 설명되어 있습니다.

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

을 반대로 하는 이 될 수 를 들어,과 같습니다.~연산자는 데이터 집합을 지우고 NaN 없이 열을 반환하는 데 사용됩니다.

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()]

인덱스의 「 」는 「 」라고 하는 에 주의해 주세요.array[~i]가 되다reversed_array[i]. 에서 시작하는 으로 볼 수 어레이의 끝부분부터 인덱스로 표시할 수 있습니다.

[0, 1, 2, 3, 4, 5, 6, 7, 8]
    ^                 ^
    i                ~i

제가 이걸 사용한 유일한 방법은numpy/pandas를 들면, 「 」의 경우는.isin() 데이터 프레임 방식

문서에는 이 기본적인 예가 나와 있습니다.

>>> df.isin([0, 2])
        num_legs  num_wings
falcon      True       True
dog        False       True

그러나 모든 행을 [0, 2]에 포함하지 않으려면 어떻게 해야 할까요?

>>> ~df.isin([0, 2])
        num_legs  num_wings
falcon     False       False
dog        True        False

리트코드 문제를 해결하던 중 Zitao Wang이라는 사용자가 이 아름다운 해결책을 찾아냈습니다.

이 문제는 주어진 배열의 각 요소에 대해 다음과 같습니다. 나머지 모든 숫자의 곱을 구하려면 division을 사용하지 마십시오.O(n)시간을

표준 솔루션은 다음과 같습니다.

Pass 1: For all elements compute product of all the elements to the left of it
Pass 2: For all elements compute product of all the elements to the right of it
        and then multiplying them for the final answer 

그의 솔루션은 루프를 위해 하나만 사용합니다.그는 왼쪽 제품과 오른쪽 제품을 즉석에서 계산한다.~

def productExceptSelf(self, nums):
    res = [1]*len(nums)
    lprod = 1
    rprod = 1
    for i in range(len(nums)):
        res[i] *= lprod
        lprod *= nums[i]
        res[~i] *= rprod
        rprod *= nums[~i]
    return res

바이너리 1의 보완(~)이라고 합니다.

이 값은 숫자의 2진수에 대한 1의 보수를 반환합니다.비트를 플립합니다.2의 2진수는 00000010 입니다.1대의 보충물은 11111101입니다.

이 값은 -3의 이진수입니다.따라서 -3이 됩니다.마찬가지로 ~1은 -2가 됩니다.

~-3

출력:2

다시, -3의 덧셈은 2이다.

이것은 사소한 용도입니다.칠데...

def split_train_test_by_id(data, test_ratio, id_column):
    ids = data[id_column]
    in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio)) 
    return data.loc[~in_test_set], data.loc[in_test_set]

위의 코드는 "Hands On Machine Learning"에서 가져온 것입니다.

- 기호 색인 마커 대신 칠드(~ 기호)를 사용합니다.

- 를 사용하는 경우와 마찬가지로 정수 인덱스에 사용합니다.

예)

array = [1,2,3,4,5,6]
print(array[-1])

로서 동일시되고 있다.

print(array[~1])

언급URL : https://stackoverflow.com/questions/8305199/the-tilde-operator-in-python

반응형