파이썬에서 'false'를 0으로, 'true'를 1로 변환하는 방법
true
유형 unicode
을 1로, false
유형 unicode
을 0 으로 변환하는 방법이 있습니까 (파이썬에서)?
예를 들면 : x == 'true' and type(x) == unicode
내가 원하는 x = 1
추신 : 사용하고 싶지 않습니다 if
- else
.
사용 int()
부울 테스트에 :
x = int(x == 'true')
int()
부울을 1
또는 로 바꿉니다 0
. 참고 값 것을 하지가 같음이 'true'
발생합니다 0
반환.
경우 B
부울 배열, 쓰기는
B = B*1
(비트 코드 골퍼.)
그 자체로 bool이 아닌 문자열에서 범용 변환이 필요한 경우 아래에 설명 된 것과 유사한 루틴을 작성하는 것이 좋습니다. 덕 타이핑의 정신에 따라 나는 조용히 오류를 전달하지 않고 현재 시나리오에 맞게 변환했습니다.
>>> def str2bool(st):
try:
return ['false', 'true'].index(st.lower())
except (ValueError, AttributeError):
raise ValueError('no Valid Conversion Possible')
>>> str2bool('garbaze')
Traceback (most recent call last):
File "<pyshell#106>", line 1, in <module>
str2bool('garbaze')
File "<pyshell#105>", line 5, in str2bool
raise TypeError('no Valid COnversion Possible')
TypeError: no Valid Conversion Possible
>>> str2bool('false')
0
>>> str2bool('True')
1
문제에 대한 또 다른 해결책은 다음과 같습니다.
def to_bool(s):
return 1 - sum(map(ord, s)) % 2
# return 1 - sum(s.encode('ascii')) % 2 # Alternative for Python 3
그것은 작동하기 때문에의 ASCII 코드의 합계 'true'
IS 448
의 ASCII 코드의 합계 반면, 짝수, 'false'
IS는 523
홀수이다.
이 솔루션의 재미있는 점은 입력이 또는 중 하나 가 아닌 경우 결과가 매우 무작위라는 것입니다 . 절반은 반환 되고 나머지 절반 은 반환됩니다 . 사용하는 변형 은 입력이 ASCII가 아닌 경우 인코딩 오류를 발생시킵니다 (따라서 동작의 정의되지 않음이 증가 함).'true'
'false'
0
1
encode
진지하게, 가장 읽기 쉽고 빠른 해결책은 다음을 사용하는 것입니다 if
.
def to_bool(s):
return 1 if s == 'true' else 0
몇 가지 마이크로 벤치 마크를 참조하십시오.
In [14]: def most_readable(s):
...: return 1 if s == 'true' else 0
In [15]: def int_cast(s):
...: return int(s == 'true')
In [16]: def str2bool(s):
...: try:
...: return ['false', 'true'].index(s)
...: except (ValueError, AttributeError):
...: raise ValueError()
In [17]: def str2bool2(s):
...: try:
...: return ('false', 'true').index(s)
...: except (ValueError, AttributeError):
...: raise ValueError()
In [18]: def to_bool(s):
...: return 1 - sum(s.encode('ascii')) % 2
In [19]: %timeit most_readable('true')
10000000 loops, best of 3: 112 ns per loop
In [20]: %timeit most_readable('false')
10000000 loops, best of 3: 109 ns per loop
In [21]: %timeit int_cast('true')
1000000 loops, best of 3: 259 ns per loop
In [22]: %timeit int_cast('false')
1000000 loops, best of 3: 262 ns per loop
In [23]: %timeit str2bool('true')
1000000 loops, best of 3: 343 ns per loop
In [24]: %timeit str2bool('false')
1000000 loops, best of 3: 325 ns per loop
In [25]: %timeit str2bool2('true')
1000000 loops, best of 3: 295 ns per loop
In [26]: %timeit str2bool2('false')
1000000 loops, best of 3: 277 ns per loop
In [27]: %timeit to_bool('true')
1000000 loops, best of 3: 607 ns per loop
In [28]: %timeit to_bool('false')
1000000 loops, best of 3: 612 ns per loop
Notice how the if
solution is at least 2.5x times faster than all the other solutions. It does not make sense to put as a requirement to avoid using if
s except if this is some kind of homework (in which case you shouldn't have asked this in the first place).
You can use x.astype('uint8')
where x
is your Boolean array.
bool to int: x = (x == 'true') + 0
Now the x contains 1 if x == 'true'
else 0.
Note: x == 'true'
will return bool which then will be typecasted to int having value (1 if bool value is True else 0) when added with 0.
참고URL : https://stackoverflow.com/questions/20840803/how-to-convert-false-to-0-and-true-to-1-in-python
'IT story' 카테고리의 다른 글
Mac OS X에서 PostgreSQL 로그는 어디에 있습니까? (0) | 2020.09.10 |
---|---|
다른 컨트롤에 포커스를 설정하지 않고 포커스를 제거하는 방법은 무엇입니까? (0) | 2020.09.10 |
Java 8에서 UTC + 0 날짜를 얻는 방법은 무엇입니까? (0) | 2020.09.10 |
iOS : NSUserDefaults에서 부울 사용 (0) | 2020.09.10 |
바이트에서 특정 비트 가져 오기 (0) | 2020.09.10 |