Есть ли способ преобразовать true
тип unicode
в 1 и false
тип unicode
в 0 (в Python)?
Например: x == 'true' and type(x) == unicode
я хочу x = 1
PS: Я не хочу использовать if
- else
.
Используйте int()
в булевом тесте:
x = int(x == 'true')
int()
превращает логическое значение в 1
или 0
. Обратите внимание, что любое значение, не равное, 'true'
будет 0
возвращено.
str
.u'true' == 'true'
функция ведет себя правильно независимо от типа ввода [междуstr
иunicode
].u'true' == 'true'
что мы не знаем, каков вариант использования. Может быть, они хотят другого поведения в той ситуации, когдаtype(x) != unicode
.arrayvalue == 'true'
сравнения, вопрос, на который я здесь ответил, относится к строковому (unicode) значению.Если
B
это логический массив, напишите(Немного кода гольфиста.)
источник
numpy.multiply(B,1)
работает.B=map(int,B)
мне вернули объект карты в python 3.Вы можете использовать,
x.astype('uint8')
гдеx
находится ваш логический массив.источник
Вот еще одно решение вашей проблемы:
Это работает , потому что сумма ASCII кодов
'true'
IS448
, что даже, в то время как сумма ASCII кодов'false'
IS ,523
который является нечетной.Самое забавное в этом решении то, что его результат довольно случайный, если вход не является одним из
'true'
или'false'
. Половину времени он вернется0
, а другую половину1
. Вариант с использованиемencode
вызовет ошибку кодирования, если ввод не является ASCII (что увеличивает неопределенность поведения).Серьезно, я считаю, что наиболее читаемым и быстрым решением будет использование
if
:См. Некоторые микробенчмарки:
Обратите внимание, что это
if
решение как минимум в 2,5 раза быстрее, чем все другие решения. Это не имеет смысла ставить как требование , чтобы избежать использованияif
S , за исключением , если это какое - то домашний (в этом случае вы не должны были спросить это в первую очередь).источник
Если вам нужно универсальное преобразование из строки, которая сама по себе не является логическим значением, вам лучше написать процедуру, аналогичную изображенной ниже. Следуя духу утиной печати, я не пропустил ошибку молча, а преобразовал ее в соответствии с текущим сценарием.
источник
TypeError
? Если строка не содержит'true'
или'false'
это ошибка значения . Если ввод не является строкой, вы получите (в 99,99% случаев)AttributeError
вместо этого, поэтому бесполезно ловитьValueError
и повторно поднимать его какTypeError
.index
AttributeError?return ['false', 'true'].index(s) except (ValueError, AttributeError)
.lower()
вызов, поскольку это было единственное решение, которое выполняло эти дополнительные вычисления, и было бы неправильно включать его в микротест. Конечно, этоtry...except
займет немного времени, но разница небольшая, если исключение не возникает (например,20ns
меньше или около того).bool в int:
x = (x == 'true') + 0
Теперь x содержит 1, если
x == 'true'
еще 0.Примечание:
x == 'true'
вернет bool, который затем будет преобразован в int, имеющий значение (1, если значение bool равно True, иначе 0) при добавлении с 0.источник
только с этим:
const a = true; const b = false;
console.log (+ a); // 1 console.log (+ b); // 0
источник