Saya ingin tahu mengapa ini valid:
set(range(10)) - set(range(5))
tapi ini tidak valid:
set(range(10)) + set(range(5))
Apakah karena '+' bisa berarti persimpangan dan persatuan?
Saya ingin tahu mengapa ini valid:
set(range(10)) - set(range(5))
tapi ini tidak valid:
set(range(10)) + set(range(5))
Apakah karena '+' bisa berarti persimpangan dan persatuan?
~
operator biner, maka Anda dapat memiliki |
+ union, dan ~
untuk perbedaan, yang jauh lebih seimbang.
Jawaban:
Set Python tidak memiliki implementasi untuk +
operator.
Anda dapat menggunakan |
untuk set union dan &
set intersection.
Set melakukan implementasi -
sebagai set perbedaan. Anda juga dapat menggunakan ^
untuk perbedaan himpunan simetris (yaitu, ia akan mengembalikan himpunan baru dengan hanya objek yang muncul dalam satu himpunan tetapi tidak muncul di kedua himpunan).
Python memilih untuk menggunakan |
daripada +
karena set union adalah konsep yang terkait erat dengan disjungsi boolean; Vektor bit (yang dalam python hanya int
/ long
) mendefinisikan operasi ini di seluruh urutan nilai boolean dan menyebutnya "bitwise atau". Nyatanya, operasi ini sangat mirip dengan kumpulan himpunan sehingga bilangan bulat biner terkadang juga disebut "Himpunan bit", di mana elemen dalam himpunan dianggap sebagai bilangan asli.
Karena int
sudah mendefinisikan operator set-like sebagai |
, &
dan ^
, wajar jika set
tipe yang lebih baru menggunakan antarmuka yang sama.
Dalam teori himpunan, simbol + biasanya menunjukkan gabungan dua himpunan yang terputus - putus . Jika A dan B adalah himpunan, pemutusan hubungan mereka didefinisikan sebagai himpunan
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
yaitu, untuk membangun persatuan terputus-putus, kita menandai semua elemen A dan semua elemen B dengan tag yang berbeda (dalam contoh ini saya menggunakan angka 1 dan 2, tetapi dua "hal" yang berbeda akan melakukan pekerjaan itu) dan kemudian mengambil penyatuan dua set yang dihasilkan. Dalam contoh di atas, saya telah menggunakan 'U' untuk kumpulan himpunan agar lebih mirip dengan notasi matematika biasa; di bawah ini saya menggunakan notasi Python, yaitu '|' untuk persatuan, dan '&' untuk persimpangan.
Jika A dan B terputus-putus, A + B memiliki korespondensi 1-ke-1 dengan A | B. Jika tidak, maka semua elemen persekutuan x di A & B muncul dua kali di A + B: sekali sebagai (x, 1), dan sekali sebagai (x, 2).
Jadi, karena simbol '+' memiliki arti yang cukup mapan sebagai operasi himpunan, saya merasa sangat konsisten bahwa Python tidak menggunakan simbol ini untuk persatuan atau persimpangan himpunan. Mungkin perancang Python memikirkan hal ini ketika mereka memilih operator set.
|
operator untuk serikat yang ditetapkan tetapi gagal menjelaskan mengapa Guido menghindari membebani +
operator untuk serikat yang ditetapkan juga. Lagi pula, melakukan hal itu akan menjaga ortogonalitas dengan +
operator kelebihan beban untuk penambahan daftar. Karena ciri khas Python adalah kesesuaian dengan notasi matematika (misalnya, j
menunjukkan komponen kompleks dari bilangan kompleks), pilihan penasaran Guido akhirnya masuk akal.
Tentu, mereka bisa dulu +
melakukan persatuan, tapi kemudian masih membutuhkan simbol untuk persimpangan. |
karena penyatuan simetris dengan &
for intersection dan dengan demikian membuat pilihan yang lebih baik.
Karena |
berarti persatuan dan &
berarti persimpangan. Jelas tidak ada alasan untuk menambahkan beberapa operator untuk fungsi yang sama.
Alasan untuk menggunakan |
dan &
mungkin kembali ke operasi bitwise. Jika Anda merepresentasikan suatu himpunan sebagai bit dalam sebuah angka, itu adalah operator yang akan Anda gunakan untuk melakukan penyatuan dan perpotongan.
+
sederhana tidak terikat pada persatuan dan -
mengatur perbedaan.
Karena perbedaan himpunan adalah konsep yang sangat berguna dan umum dikenal, tetapi tidak ada (digunakan secara universal) konsep "penambahan himpunan".
+
- kadang didefinisikan sebagai penambahan berdasarkan anggota . Beberapa menggunakannya untuk perbedaan simetris . Either way, kertas apa pun yang menggunakannya akan menyebutnya sesuatu yang lain atau mendefinisikannya terlebih dahulu.
|
berarti persatuan. Apa yang kamu tanyakan?