Apakah ada cara untuk mengubah true
tipe unicode
menjadi 1 dan false
tipe unicode
menjadi 0 (dengan Python)?
Sebagai contoh: x == 'true' and type(x) == unicode
saya ingin x = 1
PS: Saya tidak ingin menggunakan if
- else
.
Gunakan int()
pada uji boolean:
x = int(x == 'true')
int()
mengubah boolean menjadi 1
atau 0
. Perhatikan bahwa nilai apa pun yang tidak sama dengan 'true'
akan 0
dikembalikan.
str
.u'true' == 'true'
sehingga fungsi berperilaku dengan benar secara independen dari tipe input [antarastr
danunicode
].u'true' == 'true'
dan kita tidak tahu apa use case-nya. Mungkin mereka menginginkan perilaku yang berbeda untuk situasi dimanatype(x) != unicode
.arrayvalue == 'true'
perbandingan, pertanyaan yang saya jawab di sini khusus untuk nilai string (unicode).Jika
B
adalah array Boolean, tulis(Sedikit kode golf.)
sumber
numpy.multiply(B,1)
karya.B=map(int,B)
mengembalikan peta obejct di python 3 untuk saya.Anda dapat menggunakan
x.astype('uint8')
wherex
is your Boolean array.sumber
Inilah solusi lain untuk masalah Anda:
Ia bekerja karena jumlah dari kode ASCII dari
'true'
yaitu448
, yang bahkan, sedangkan jumlah dari kode ASCII dari'false'
yaitu523
yang aneh.Hal yang lucu tentang solusi ini adalah hasilnya cukup acak jika inputnya bukan salah satu
'true'
atau'false'
. Separuh waktu akan kembali0
, dan separuh lainnya1
. Varian yang menggunakanencode
akan memunculkan kesalahan encoding jika inputnya bukan ASCII (sehingga meningkatkan perilaku yang tidak ditentukan).Serius, saya yakin solusi yang paling mudah dibaca dan lebih cepat adalah dengan menggunakan
if
:Lihat beberapa microbenchmark:
Perhatikan bagaimana
if
solusinya setidaknya 2,5x kali lebih cepat dari semua solusi lainnya. Ini tidak masuk akal untuk menempatkan sebagai syarat untuk menghindari penggunaanif
s kecuali jika ini adalah beberapa jenis pekerjaan rumah (dalam hal ini Anda tidak harus meminta ini di tempat pertama).sumber
Jika Anda memerlukan konversi tujuan umum dari string yang sebenarnya bukan bool, sebaiknya Anda menulis rutinitas yang serupa dengan yang digambarkan di bawah ini. Sesuai dengan semangat mengetik bebek, saya tidak melewati kesalahan tersebut secara diam-diam, tetapi mengubahnya sesuai dengan skenario saat ini.
sumber
TypeError
? Jika string tidak mengandung'true'
atau'false'
itu adalah kesalahan nilai . Jika inputnya bukan string, Anda akan mendapatkan (99,99% dari waktu) anAttributeError
, maka tidak ada gunanya menangkapValueError
dan menaikkannya kembali sebagaiTypeError
.index
cara meningkatkan AttributeError?return ['false', 'true'].index(s) except (ValueError, AttributeError)
.lower()
panggilan karena ini adalah satu-satunya solusi yang melakukan perhitungan tambahan ini dan tidak akan benar untuk memasukkannya ke dalam tolok ukur mikro. Memang sihtry...except
memakan waktu agak lama, tapi bedanya kecil kalau tidak terkecuali dinaikkan (seperti20ns
kurang atau lebih).bool ke int:
x = (x == 'true') + 0
Sekarang x berisi 1 jika
x == 'true'
lagi 0.Catatan:
x == 'true'
akan mengembalikan bool yang kemudian akan diketik menjadi int yang memiliki nilai (1 jika nilai bool adalah True else 0) bila ditambahkan 0.sumber
hanya dengan ini:
const a = true; const b = salah;
console.log (+ a); // 1 console.log (+ b); // 0
sumber