Ini collections.Counterterkait dengan struktur data matematika yang disebut multiset (mset). Ini pada dasarnya adalah diktekan dari pasangan nilai kunci (objek, multiplisitas).
Operasi yang diberikan antara dua penghitung yang ditetapkan c1dan c2:
>>> c1 = c1 | c2 # 1>>> c1 |= c2 # 2
dimana c1setara melalui:
operasi serikat yang ditugaskan
operasi serikat di tempat
Sebuah serikat multisets berisi multiplicities maksimum per entri. Catatan, ini tidak berlaku dengan cara yang sama seperti antara dua set atau di antara dua penis biasa.
Contoh
Di sini kami menerapkan union ( |) dan in-place union ( |=) ke Counter :
Bagian ini secara singkat mengulas beberapa matematika bitwise. Dalam kasus yang paling sederhana, operasi bitwise OR membandingkan dua bit biner. Itu akan selalu kembali 1kecuali jika kedua bit tersebut 0.
>>>assert1==(1|1)==(1|0)==(0|1)>>>assert0==(0|0)
Kami sekarang memperluas gagasan ini di luar bilangan biner. Diberikan dua bilangan integral (tidak memiliki komponen pecahan), kami menerapkan bitwise OR dan mendapatkan hasil integral:
>>> a =10>>> b =16>>> a | b
26
Bagaimana? Secara umum, operasi bitwise mengikuti beberapa "aturan":
membandingkan secara internal setara biner
terapkan operasi
kembalikan hasilnya sebagai tipe yang diberikan
Mari terapkan aturan ini ke bilangan bulat reguler di atas.
(1) Bandingkan ekuivalen biner, terlihat di sini sebagai string ( 0bmenunjukkan biner):
>>> bin(a)'0b1010'>>> bin(b)'0b10000'
(2) Terapkan operasi OR bitwise ke setiap kolom ( 0jika keduanya 0, lain 1):
0101010000-----11010
(3) Kembalikan hasil dalam jenis yang diberikan, misalnya basis 10, desimal:
>>> int(0b11010)26
Perbandingan biner internal berarti kita dapat menerapkan yang terakhir ke bilangan bulat di basis apa pun, misalnya heksa dan oktal:
Agar lebih jelas, saya akan menambahkan demonstrasi bahwa setelah melakukan penugasan biasa (x = x | y) id (x) telah berubah karena itu adalah objek baru, sementara | = menyimpan id yang sama karena itu adalah x asli itu dimodifikasi, oleh karena itu dinamai "di tempat".
Florimond
1
Ini harus menjadi jawaban teratas - ini yang paling lengkap.
Nick
Di bagian angka, Anda mengklaim bahwa pernyataan kedua melakukan operasi di tempat. Saya pikir itu tidak benar, karena ints tidak bisa berubah di Python.
Asocia
106
Di Python, dan banyak bahasa pemrograman lainnya, |adalah operasi bitwise-OR . |=adalah |sebagaimana +=adanya +, yaitu kombinasi antara operasi dan asignment.
Jadi var |= valuekependekan dari var = var | value.
Kasus penggunaan yang umum adalah menggabungkan dua set:
Hal ini memberikan kesan operator yang menyesatkan; |adalah operator bitwise-or untuk bilangan bulat, bukan secara spesifik operator boolean, dan untuk apa pun selain bools, ia tidak akan benar-benar menghasilkan Trueatau Falsemengeluarkan. booladalah subkelas dari int, dan untuk menyenangkannya, mereka membebani untuk booltetap memproduksi True/ Falsekeluaran, tetapi dalam banyak kasus, operasi boolean harus dilakukan dengan or, bukan |. Penggunaan normal untuk |adalah bitwise-or, atau set-union. Contoh penggunaan yang lebih baik adalah sesuatu seperti a = 0b1001; a |= 0b0010; print(bin(a))yang menghasilkan 0b1011.
ShadowRanger
9
Ini melakukan bitwise biner OR dari sisi kiri dan kanan tugas, kemudian menyimpan hasilnya di variabel kiri.
ini adalah penjelasan yang saya cari, semua orang berbicara tentang set dan bools tetapi tidak ada yang menyebutkan penggunaannya dengan angka.
Ankush Verma
Contoh yang Anda berikan bukan 32 |= 10melainkan 32 | 10. Hanya untuk mengklarifikasi hal ini untuk pembaca selanjutnya :)
sniper71
@ sniper71 apa hasil dari 32 | = 10
Future-Jim
2
Untuk memberikan kasus penggunaan (setelah menghabiskan waktu dengan jawaban lain):
def process(item):return bool(item)# imagine some sort of complex processing taking place abovedef any_success(data):# return True if at least one is successful
at_least_one =Falsefor item in data:
at_least_one |= process(item)return at_least_one
>>> any_success([False,False,False])False>>> any_success([True,False,False])True>>> any_success([False,True,False])True
Pada dasarnya anytanpa korsleting: mungkin berguna jika Anda perlu memproses setiap item dan mencatat setidaknya satu keberhasilan, dll.
Dalam Python, | = (ior) bekerja seperti operasi gabungan. seperti jika x = 5 dan x | = 5 maka kedua nilai tersebut akan dikonversi terlebih dahulu ke dalam nilai biner kemudian operasi penyatuan akan dilakukan dan kita mendapatkan jawaban 5.
|
Jawaban:
|=
melakukan operasi di tempat + di antara pasangan objek. Secara khusus, antara:Dalam kebanyakan kasus, ini terkait dengan
|
operator. Lihat contoh di bawah.Set
Misalnya, gabungan dari dua set yang ditetapkan
s1
dans2
berbagi ekspresi setara berikut:di mana nilai akhir
s1
setara dengan:Contoh
Di sini kami menerapkan OR (
|
) dan inplace OR (|=
) ke set :Kamus
Di Python 3.9+ , operator merge (
|
) dan update (|=
) baru diusulkan antar kamus. Catatan: ini tidak sama dengan operator set yang disebutkan di atas.Operasi yang diberikan antara dua penis yang ditugaskan
d1
dand2
:dimana
d1
setara melalui:d1.update(d2)
Contoh
Di sini kami menerapkan merge (
|
) dan update (|=
) ke dicts :Penghitung
Ini
collections.Counter
terkait dengan struktur data matematika yang disebut multiset (mset). Ini pada dasarnya adalah diktekan dari pasangan nilai kunci (objek, multiplisitas).Operasi yang diberikan antara dua penghitung yang ditetapkan
c1
danc2
:dimana
c1
setara melalui:Sebuah serikat multisets berisi multiplicities maksimum per entri. Catatan, ini tidak berlaku dengan cara yang sama seperti antara dua set atau di antara dua penis biasa.
Contoh
Di sini kami menerapkan union (
|
) dan in-place union (|=
) ke Counter :Angka
Terakhir, Anda dapat melakukan matematika biner.
Operasi yang diberikan antara dua nomor yang ditetapkan
n1
dann2
:dimana
n1
setara melalui:Contoh
Di sini kami menerapkan bitwise OR (
|
) dan bitwise OR ( ) di tempat|=
ke angka :Ulasan
Bagian ini secara singkat mengulas beberapa matematika bitwise. Dalam kasus yang paling sederhana, operasi bitwise OR membandingkan dua bit biner. Itu akan selalu kembali
1
kecuali jika kedua bit tersebut0
.Kami sekarang memperluas gagasan ini di luar bilangan biner. Diberikan dua bilangan integral (tidak memiliki komponen pecahan), kami menerapkan bitwise OR dan mendapatkan hasil integral:
Bagaimana? Secara umum, operasi bitwise mengikuti beberapa "aturan":
Mari terapkan aturan ini ke bilangan bulat reguler di atas.
(1) Bandingkan ekuivalen biner, terlihat di sini sebagai string (
0b
menunjukkan biner):(2) Terapkan operasi OR bitwise ke setiap kolom (
0
jika keduanya0
, lain1
):(3) Kembalikan hasil dalam jenis yang diberikan, misalnya basis 10, desimal:
Perbandingan biner internal berarti kita dapat menerapkan yang terakhir ke bilangan bulat di basis apa pun, misalnya heksa dan oktal:
Lihat juga
__ior__()
metode untuk mengulang iterable dalamMutableSet
kelas dasar abstrak|=
untuk memperbarui satu set+ Operator OR bitwise di tempat tidak dapat diterapkan ke literal; menetapkan objek ke nama.
++ Metode khusus mengembalikan operasi yang sama dengan operator terkait.
sumber
int
s tidak bisa berubah di Python.Di Python, dan banyak bahasa pemrograman lainnya,
|
adalah operasi bitwise-OR .|=
adalah|
sebagaimana+=
adanya+
, yaitu kombinasi antara operasi dan asignment.Jadi
var |= value
kependekan darivar = var | value
.Kasus penggunaan yang umum adalah menggabungkan dua set:
sumber
Saat digunakan dengan set, ia melakukan operasi gabungan.
sumber
|=
digunakan dalam konteks yang ditetapkan, dan baru setelah sayaIni hanyalah operasi OR antara variabel saat ini dan variabel lainnya. Sedang
T=True
danF=False
, lihat hasilnya secara grafis:Sebagai contoh:
sumber
|
adalah operator bitwise-or untuk bilangan bulat, bukan secara spesifik operator boolean, dan untuk apa pun selainbool
s, ia tidak akan benar-benar menghasilkanTrue
atauFalse
mengeluarkan.bool
adalah subkelas dariint
, dan untuk menyenangkannya, mereka membebani untukbool
tetap memproduksiTrue
/False
keluaran, tetapi dalam banyak kasus, operasi boolean harus dilakukan denganor
, bukan|
. Penggunaan normal untuk|
adalah bitwise-or, atau set-union. Contoh penggunaan yang lebih baik adalah sesuatu sepertia = 0b1001; a |= 0b0010; print(bin(a))
yang menghasilkan0b1011
.Ini melakukan bitwise biner OR dari sisi kiri dan kanan tugas, kemudian menyimpan hasilnya di variabel kiri.
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
sumber
Ini bitwise atau. Misalkan kita punya
32 |= 10
, gambar 32 dan 10 adalah biner.Sekarang karena | adalah atau, lakukan sedikit atau pada dua angka
yaitu 1 atau 0 -> 1, 0 atau 0 -> 0. Lanjutkan proses ini ke bawah rantai
Sekarang ubah biner menjadi desimal, 10 1010 = 42.
Untuk | =, pikirkan contoh yang diketahui
x +=5
,. Artinya,x = x + 5,
jika kita punyax |= 5
, itu artinyax = x bitwiseor with 5
.sumber
32 |= 10
melainkan32 | 10
. Hanya untuk mengklarifikasi hal ini untuk pembaca selanjutnya :)Untuk memberikan kasus penggunaan (setelah menghabiskan waktu dengan jawaban lain):
Pada dasarnya
any
tanpa korsleting: mungkin berguna jika Anda perlu memproses setiap item dan mencatat setidaknya satu keberhasilan, dll.Lihat juga peringatan dalam jawaban ini
sumber
Dalam Python, | = (ior) bekerja seperti operasi gabungan. seperti jika x = 5 dan x | = 5 maka kedua nilai tersebut akan dikonversi terlebih dahulu ke dalam nilai biner kemudian operasi penyatuan akan dilakukan dan kita mendapatkan jawaban 5.
sumber