Asumsikan itu S
dan T
ditugaskan set. Tanpa menggunakan operator gabungan |
, bagaimana saya bisa menemukan gabungan dari dua set? Ini, misalnya, menemukan persimpangan:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Jadi bagaimana saya bisa menemukan penyatuan dua set dalam satu baris tanpa menggunakan |
?
|
?|
?def apply_set_operation(a, b, set_operation)
. Saat memanggil fungsi ini, saya lebih sukaapply_set_operation(a, b, set.union)
untukapply_set_operation(a, b, set.__or__)
Jawaban:
Anda dapat menggunakan metode gabungan untuk set:
set.union(other_set)
Perhatikan bahwa ia mengembalikan set baru yaitu tidak memodifikasi sendiri.
sumber
|
dapat memodifikasi variabel sebaris:set_a |= set_b
set_a = set_a.union(set_b)
. Jika Anda berarti "di tempat", tidak akan melakukan itu, baik buat baruset
a = set((1, 2, 3,)); b = set((1, 3, 4,)); id_a = id(a); a |= b; assert id_a == id(a)
:, @jorgenkg benar - variabela
dimodifikasi sebaris. Apakah saya melewatkan sesuatu?a = set((1, 2, 3,)); b = set((1, 3, 4,)); c = a; a |= b; assert id(c) == id(a)
. Bahkan jikaa
dihancurkan,c
tidak akan terjadi. Juga,c
sekarangset([1, 2, 3, 4])
, jadi komentar @ jorgenkg benar.Anda bisa menggunakan
or_
alias:sumber
Jika Anda setuju dengan memodifikasi set asli (yang mungkin ingin Anda lakukan dalam beberapa kasus), Anda dapat menggunakan
set.update()
:Nilai pengembaliannya adalah
None
, tetapiS
akan diperbarui menjadi penyatuan yang asliS
danT
.sumber
Dengan asumsi Anda juga tidak dapat menggunakan
s.union(t)
, yang setara dengans | t
, Anda dapat mencobaAtau, jika Anda ingin pemahaman,
sumber
Jika dengan bergabung dengan Anda maksud penyatuan, coba ini:
Ini sedikit hack, tapi saya tidak bisa memikirkan yang lebih baik untuk melakukannya.
sumber
list
danset
dibangun dalam fungsi pythonMisalkan Anda memiliki 2 daftar
sehingga Anda dapat menemukan
A
UnionB
sebagai berikutjuga jika Anda ingin menemukan persimpangan dan non-persimpangan Anda melakukannya sebagai berikut
sumber
Anda bisa membongkar kedua set menjadi satu seperti ini:
The
*
membongkar set. Bongkar adalah tempat iterable (misalnya satu set atau daftar) diwakili karena setiap item yang dihasilkannya. Ini berarti contoh di atas menyederhanakan{1, 2, 3, 4, 3, 4, 5, 6}
yang kemudian disederhanakan{1, 2, 3, 4, 5, 6}
karena set hanya dapat berisi item unik.sumber
*
dilakukan di baris 3?Anda dapat melakukan
union
atau daftar pemahaman sederhanaA akan memiliki semua elemen B
sumber