Pyt*_*ast 97 python string int
有没有办法将true类型转换unicode为1和false类型转换unicode为0(在python中)?
例如: x == 'true' and type(x) == unicode
我想要 x = 1
PS:我不想使用if-else.
Mar*_*ers 143
使用int()一个布尔测试:
x = int(x == 'true')
Run Code Online (Sandbox Code Playgroud)
int()将布尔值转换为1或0.请注意,任何不等于的值'true'都将导致0返回.
Sno*_*att 122
如果B是布尔数组,请写入
B = B*1
Run Code Online (Sandbox Code Playgroud)
有点代码高尔夫球,但我喜欢它.
如果你需要一个字符串的通用转换本身不是一个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
Run Code Online (Sandbox Code Playgroud)
这是您的问题的另一个解决方案:
def to_bool(s):
return 1 - sum(map(ord, s)) % 2
# return 1 - sum(s.encode('ascii')) % 2 # Alternative for Python 3
Run Code Online (Sandbox Code Playgroud)
它的工作原理因为ASCII码的总和'true'就是448,这是偶数,而的ASCII码的总和'false'是523这是奇怪的.
关于这个解决方案的有趣之处在于,如果输入不是'true'或者是其中一个,那么它的结果是相当随机的'false'.一半的时间会返回0,另一半1.encode如果输入不是ASCII,则变量using 将引发编码错误(从而增加行为的未定义).
说真的,我相信最可读,更快的解决方案是使用if:
def to_bool(s):
return 1 if s == 'true' else 0
Run Code Online (Sandbox Code Playgroud)
查看一些微基准测试:
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
Run Code Online (Sandbox Code Playgroud)
请注意该if解决方案至少 比所有其他解决方案快2.5倍.作为要求避免使用s 是没有意义的,除非这是某种功课(在这种情况下你不应该首先问这个).if
| 归档时间: |
|
| 查看次数: |
182283 次 |
| 最近记录: |