Set python hapus vs buang

Anda akan menggunakan set. buang ketika Anda tidak peduli apakah elemen itu ada
himpunan atau tidak. Pikirkan membuang sebagai "jika ada, hapus,
kalau tidak jangan ganggu aku”

Jika bukan kesalahan untuk menghapus sesuatu yang tidak ada, maka gunakan
membuang

Anda akan menggunakan set. hapus ketika Anda benar-benar peduli bahwa elemen itu ada
sebelum menghapusnya, atau jika merupakan kesalahan untuk mencoba menghapus sesuatu itu
tidak ada

Analogi. jika gubernur mengatakan “keluarkan Roger dari penjara. tapi Roger
tidak dapat ditemukan, maka ada masalah yang perlu ditangani

Dalam hal ini, Anda memiliki dua pilihan

(1) Lihat Sebelum Anda Melompat (LBYL). periksa apakah elemen ada di
atur, dan jika demikian, hapus

if roger in prison:
    prison.remove(roger)

(2) Lebih Mudah Meminta Pengampunan daripada Izin (EAFP). hapus saja,
dan jika pengecualian terjadi, tangkap dan atasi (mungkin dengan
mengabaikannya)

try:
    prison.remove(roger)
except KeyError:
    pass
_

Setiap pilihan memiliki pro dan kontra. Jika elemen yang hilang jarang terjadi, maka opsi
2 akan lebih cepat. Jika umum, maka opsi 1 akan lebih cepat. Jika
Anda menggunakan kode berulir atau pemrosesan paralel lainnya di mana lebih dari
satu bagian kode memiliki akses ke set, maka opsi 1 tidak aman dan
opsi 2 adalah yang Anda butuhkan. Kalau tidak, itu hanya masalah apa yang Anda
lebih suka

Buang dan Hapus kedua fungsi menghapus nilai tertentu dari kamus. Lalu pertanyaan utamanya adalah fungsi mana yang harus kita gunakan dan mengapa?

Misalkan Anda memiliki satu set s={‘Apple’,’Elephant’,’orange’}_ mari kita coba kedua fungsi tersebut

1. s={‘Apple’,’Elephant’,’orange’}
s.remove('Elephant')
print(s)
[out]>> {'Apple','orange'}2. s={‘Apple’,’Elephant’,’orange’}
s.remove('ele')
print(s)
[out]>> Traceback (most recent call last):
File "./prog.py", line 3, in KeyError: 'ban'

Jika kita ingin menghilangkan nilai tertentu menggunakan fungsi hapus dan nilai itu tidak ada di set maka itu akan menimbulkan kesalahan. Tetapi dalam kasus fungsi buang, jika nilai yang ingin kita hilangkan tidak ada di set, itu akan mencetak set apa adanya tidak akan menampilkan kesalahan apa pun

Metode set.discard(x) Python menghapus elemen x dari set ini jika itu adalah anggota. Kalau tidak, tidak apa-apa

Set Python buang() - Contoh, Penjelasan, Runtime

Set python hapus vs buang

Tonton video ini di YouTube

Berikut adalah contoh minimal di mana Anda menghapus elemen string 'Bob' dari set melalui metode

set.discard(element)
0

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
_

Sintaksis

Mari "selami" sintaks formal metode

set.discard(element)
1

set.discard(element)
ArgumentData TypeExplanation
set.discard(element)
2objectElemen hashable yang akan dihapus dari set jika ada

Mengembalikan Nilai set. membuang()

Nilai pengembalian

set.discard(element)
_1 adalah
set.discard(element)
4

mengatur. buang() vs atur. menghapus()

Metode

set.discard(element)
_1 mirip dengan metode
set.discard(element)
6. Kedua metode mengambil elemen untuk dihapus sebagai argumen dan menghapus elemen ini dari set tempat mereka dipanggil. Jika elemen yang akan dihapus ada di set, metode memiliki perilaku yang sama

?

Hasilnya, tidak ada hal buruk yang terjadi jika Anda membuang elemen yang sama dua kali

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}

Namun, jika Anda menghapus elemen yang sama dua kali, Python memunculkan

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
1 segera setelah elemen tersebut bukan anggota himpunan lagi

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'

Dalam kebanyakan kasus, Anda tidak menginginkan perilaku ini, itulah sebabnya saya menyarankan Anda menggunakan metode

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
3 per default untuk menghapus elemen dari set daripada menerapkan logika coba/kecuali yang lebih rumit untuk menangani kesalahan

Set Python Buang Beberapa Elemen

Formulasi masalah. Diberikan satu set dan iterable elemen yang ingin Anda hapus dari set. Tetapi Anda tidak ingin Python memunculkan kesalahan jika elemen set tidak ada. Dengan kata lain, bagaimana cara membuang banyak elemen dari himpunan?

? . Metode ini menghapus semua elemen yang juga merupakan anggota himpunan. Jika tidak ada elemen yang menjadi anggota, metode tidak melakukan apa pun

Berikut adalah contoh metode

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
5 untuk membuang beberapa elemen

>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}

Saya menemukan metode ini lebih unggul daripada mengulang semua elemen yang akan dihapus karena lebih ringkas

>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> for element in to_remove:
	s.discard(element)

	
>>> s
{2, 3, 'Carl'}

Apa Kompleksitas Waktu himpunan. membuang()?

Kompleksitas runtime dari fungsi

set.discard(element)
_1 pada set dengan n elemen adalah O(1). Jadi, metode
set.discard(element)
1 Python memiliki kompleksitas runtime yang konstan. Alasannya adalah keanggotaan set memiliki kompleksitas runtime yang konstan karena penerapan tabel hash—dan mengingat elemen yang dimaksud, kita dapat dengan mudah menghapusnya dari set tanpa melihat semua elemen di set

Anda dapat melihat ini dalam percobaan sederhana berikut di mana kami menjalankan metode set beberapa kali untuk meningkatkan jumlah elemen set

Set python hapus vs buang
Angka. Waktu proses (sumbu y) tidak bergantung pada jumlah elemen set (sumbu x), jadi
set.discard(element)
1 memiliki kompleksitas waktu proses yang konstan

Saya menjalankan percobaan ini di notebook Acer Aspire 5 saya (saya tahu) dengan prosesor Intel Core i7 (Gen ke-8) dan memori 16GB. Ini kode eksperimennya

import matplotlib.pyplot as plt
import time

sizes = [i * 10**5 for i in range(50)]
runtimes = []

for size in sizes:
    s = set(range(size))

    # Start track time ...
    t1 = time.time()
    s.discard(size-99)
    t2 = time.time()
    # .. end track time
    
    runtimes.append(t2-t1)


plt.plot(sizes, runtimes)
plt.ylabel('Runtime (s)')
plt.xlabel('Set Size')

plt.show()

Metode Set Python Lainnya

Semua metode himpunan dipanggil pada himpunan tertentu. Misalnya, jika Anda membuat himpunan

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
9, Anda akan memanggil
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
0 untuk menghapus semua elemen himpunan. Kami menggunakan istilah "himpunan ini" untuk merujuk ke himpunan tempat metode dijalankan

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
1Tambahkan elemen ke set ini
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
2Hapus semua elemen dari set ini
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
3Buat dan kembalikan salinan datar dari set ini
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
4Buat dan kembalikan set baru yang berisi semua elemen set ini kecuali yang ada di argumen set yang diberikan. Himpunan yang dihasilkan memiliki elemen paling banyak seperti yang lainnya.
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
5Hapus semua elemen dari set ini yang merupakan anggota dari salah satu argumen set yang diberikan.
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
6Hapus elemen dari set ini jika itu adalah anggota, jika tidak, jangan lakukan apa pun.
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
7Membuat dan mengembalikan set baru yang berisi semua elemen yang merupakan anggota dari semua set. ini dan ditentukan juga. .
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
8Menghapus semua elemen dari set ini yang bukan anggota dari semua set lain yang ditentukan.
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'
9Kembali
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
0 jika tidak ada elemen dari himpunan ini yang merupakan anggota dari himpunan tertentu lainnya. Himpunan-himpunan saling lepas jika dan hanya jika perpotongannya adalah himpunan kosong.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
1Kembali
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
0 jika semua elemen dari himpunan ini adalah anggota dari argumen himpunan yang ditentukan.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
3Kembali
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
0 jika semua elemen dari argumen himpunan yang ditentukan adalah anggota dari himpunan ini.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
5Hapus dan kembalikan elemen acak dari set ini. Jika set kosong, itu akan memunculkan
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
1.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
7Hapus dan kembalikan elemen tertentu dari set ini seperti yang didefinisikan dalam argumen. Jika set tidak mengandung elemen, itu akan memunculkan
>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}
1.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}
9Mengembalikan set baru dengan elemen baik di set ini atau argumen set yang ditentukan, tetapi bukan elemen yang merupakan anggota dari keduanya.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> for element in to_remove:
	s.discard(element)

	
>>> s
{2, 3, 'Carl'}
0Ganti set ini dengan perbedaan simetris, i. e. , elemen dalam himpunan ini atau argumen himpunan yang ditentukan, tetapi bukan elemen yang merupakan anggota dari keduanya.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> for element in to_remove:
	s.discard(element)

	
>>> s
{2, 3, 'Carl'}
1Buat ​​dan kembalikan set baru dengan semua elemen yang ada di set ini, atau di salah satu argumen set yang ditentukan.
>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> for element in to_remove:
	s.discard(element)

	
>>> s
{2, 3, 'Carl'}
2Perbarui set ini dengan semua elemen yang ada di set ini, atau di salah satu argumen set yang ditentukan. Himpunan yang dihasilkan setidaknya memiliki elemen sebanyak yang lainnya

Set python hapus vs buang

Chris

Saat bekerja sebagai peneliti dalam sistem terdistribusi, Dr. Christian Mayer menemukan cintanya untuk mengajar siswa ilmu komputer

Untuk membantu siswa mencapai tingkat kesuksesan Python yang lebih tinggi, dia mendirikan situs web pendidikan pemrograman Finxter. com. Dia adalah penulis buku pemrograman populer Python One-Liners (NoStarch 2020), rekan penulis seri Coffee Break Python dari buku yang diterbitkan sendiri, penggemar ilmu komputer, pekerja lepas, dan pemilik salah satu dari 10 blog Python terbesar di dunia

Kesukaannya adalah menulis, membaca, dan coding. Tetapi hasrat terbesarnya adalah untuk melayani calon pembuat kode melalui Finxter dan membantu mereka meningkatkan keterampilan mereka. Anda dapat bergabung dengan akademi email gratisnya di sini