¿Hay alguna forma de convertir el truetipo unicodea 1 y el falsetipo unicodea 0 (en Python)?
Por ejemplo: x == 'true' and type(x) == unicode
quiero x = 1
PD: no quiero usar if- else.
Usar int()en una prueba booleana:
x = int(x == 'true')
int()convierte el booleano en 1o 0. Tenga en cuenta que cualquier valor que no sea igual a 'true'resultará en 0ser devuelto.
str.u'true' == 'true'la función se comporta correctamente independientemente del tipo de entrada [entrestryunicode].u'true' == 'true'y que no sabemos cuál es el caso de uso. Quizás quieran un comportamiento diferente para la situación en la quetype(x) != unicode.arrayvalue == 'true'comparación, la pregunta que respondí aquí es específica de un valor de cadena (Unicode).Si
Bes una matriz booleana, escriba(Un código de bits golfy).
fuente
numpy.multiply(B,1)funciona.B=map(int,B)devolvió un objeto de mapa en Python 3.Puede usar
x.astype('uint8')dóndexestá su matriz booleana.fuente
Aquí hay otra solución más a su problema:
Funciona porque la suma de los códigos ASCII de
'true'es448, que es par, mientras que la suma de los códigos ASCII de'false'es523que es impar.Lo curioso de esta solución es que su resultado es bastante aleatorio si la entrada no es una de
'true'o'false'. La mitad de las veces volverá0y la otra mitad1. La variante que usaencodegenerará un error de codificación si la entrada no es ASCII (aumentando así la indefinición del comportamiento).En serio, creo que la solución más fácil de leer y más rápida es usar un
if:Vea algunos microbenchmarks:
Observe cómo la
ifsolución es al menos 2,5 veces más rápida que todas las demás soluciones. No , no tiene sentido poner como requisito para evitar el uso deifs, excepto si se trata de algún tipo de tarea (en cuyo caso no debería haber hecho esta en el primer lugar).fuente
Si necesita una conversión de propósito general de una cadena que per se no es un bool, es mejor que escriba una rutina similar a la que se muestra a continuación. De acuerdo con el espíritu de la escritura pato, no pasé el error silenciosamente, sino que lo convertí según corresponda para el escenario actual.
fuente
TypeError? Si la cadena no contiene'true'o'false'es un error de valor . Si la entrada no es una cadena, obtendrá (99,99% de las veces) unAttributeErroren su lugar, por lo que es inútil buscarloValueErrory volver a subirlo comoTypeError.indexgenerar un AttributeError?return ['false', 'true'].index(s) except (ValueError, AttributeError).lower()llamada, ya que esta era la única solución que hacía este cálculo adicional y no habría sido correcto incluirla en el micro-benchmark. Claro que inclusotry...excepttomará un poco de tiempo, pero la diferencia es pequeña si no se plantea ninguna excepción (como20nsmenos o así).bool a int:
x = (x == 'true') + 0Ahora la x contiene 1 si
x == 'true'más 0.Nota:
x == 'true'devolverá bool, que luego se convertirá en int que tiene valor (1 si el valor bool es True en caso contrario 0) cuando se agregue con 0.fuente
solo con esto:
const a = verdadero; const b = falso;
console.log (+ a); // 1 console.log (+ b); // 0
fuente