Tetapkan operasi (cth., menentukan set kesatuan, set produk dan subset) dengan jenis set Python

Perniagaan

Python menyediakan jenis data terbina dalam, set, yang mengendalikan set.

Set jenis ialah koleksi elemen bukan pendua (elemen yang bukan nilai yang sama, elemen unik) dan boleh melakukan operasi set seperti set kesatuan, set produk dan set perbezaan.

Dalam bahagian ini, operasi asas dalam operasi set jenis set diterangkan dengan kod sampel.

  • Penciptaan objek yang ditetapkan:{},set()
  • tetapkan tatatanda kemasukan
  • Bilangan elemen dalam set:len()
  • Menambah Elemen pada Set:add()
  • Alih keluar elemen daripada set:discard(),remove(),pop(),clear()
  • Wasset (penggabungan, kesatuan):|pengendali,union()
  • Set produk (bahagian biasa, persimpangan, persimpangan):& pengendali,intersection()
  • pelengkap relatif:-pengendali,difference()
  • set perbezaan simetri:^ pengendali,symmetric_difference()
  • subset atau tidak:<= pengendali,issubset()
  • Set atas atau tidak:>= pengendali,issuperset()
  • Penentuan sama ada mereka saling unggul atau tidak:isdisjoint()

Jenis set ialah jenis boleh ubah yang boleh menambah dan memadam elemen, dan terdapat juga jenis set beku yang mempunyai operasi set yang sama dan kaedah lain seperti jenis set tetapi tidak boleh diubah (tidak boleh diubah suai dengan menambah, memadam atau mengubah suai elemen. ).

Penciptaan objek set::{},set()

Dijana oleh kurungan gelombang {}

Set jenis objek boleh dibuat dengan melampirkan elemen dalam pendakap {}.

Jika terdapat nilai pendua, nilai tersebut diabaikan dan hanya nilai unik kekal sebagai elemen.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>

Ia adalah mungkin untuk mempunyai jenis yang berbeza sebagai elemen. Walau bagaimanapun, objek boleh dikemas kini seperti jenis senarai tidak boleh didaftarkan. Tuple dibenarkan.

Selain itu, memandangkan jenis set tidak tertib, susunan ia dijana tidak disimpan.

s = {1.23, 'abc', (0, 1, 2), 'abc'}

print(s)
# {(0, 1, 2), 1.23, 'abc'}

# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'

Jenis yang berbeza, seperti int dan float, dianggap pendua jika nilainya setara.

s = {100, 100.0}

print(s)
# {100}

Memandangkan pendakap kosong {} dianggap sebagai jenis kamus, objek jenis set kosong (set kosong) boleh dibuat menggunakan pembina yang diterangkan seterusnya.

s = {}

print(s)
print(type(s))
# {}
# <class 'dict'>

Dijana oleh set pembina()

Objek jenis set juga boleh dibuat dengan set pembina ().

Menentukan objek boleh lelar seperti senarai atau tupel sebagai argumen menjana objek set yang elemennya adalah nilai unik sahaja, dengan elemen pendua dikecualikan.

l = [1, 2, 2, 3, 1, 4]

print(l)
print(type(l))
# [1, 2, 2, 3, 1, 4]
# <class 'list'>

s_l = set(l)

print(s_l)
print(type(s_l))
# {1, 2, 3, 4}
# <class 'set'>

Jenis set beku tidak berubah dicipta dengan set beku pembina().

fs_l = frozenset(l)

print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>

Jika hujah ditinggalkan, objek jenis set kosong (set kosong) dicipta.

s = set()

print(s)
print(type(s))
# set()
# <class 'set'>

Elemen pendua boleh dialih keluar daripada senarai atau tupel menggunakan set(), tetapi susunan senarai asal tidak dipelihara.

Untuk menukar jenis set kepada senarai atau tupel, gunakan list(),tuple().

l = [2, 2, 3, 1, 3, 4]

l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]

Lihat artikel berikut untuk mendapatkan maklumat tentang mengalih keluar elemen pendua sambil mengekalkan susunan, mengekstrak elemen pendua sahaja dan memproses elemen pendua dalam tatasusunan dua dimensi (senarai senarai).

tetapkan tatatanda kemasukan

Serta pemahaman senarai, terdapat pemahaman yang ditetapkan. Hanya gantikan kurungan segi empat sama [] dengan pendakap {} dalam pemahaman senarai.

s = {i**2 for i in range(5)}

print(s)
# {0, 1, 4, 9, 16}

Lihat artikel berikut untuk mendapatkan maklumat lanjut tentang tatatanda pemahaman senarai.

Bilangan elemen dalam set:len()

Bilangan elemen dalam set boleh diperoleh dengan fungsi terbina dalam len().

s = {1, 2, 2, 3, 1, 4}

print(s)
print(len(s))
# {1, 2, 3, 4}
# 4

Jika anda ingin mengira bilangan elemen dalam setiap senarai yang mempunyai elemen dengan nilai pendua, dsb., lihat artikel berikut.

Menambah Elemen pada Set:add()

Untuk menambah elemen pada set, gunakan kaedah add().

s = {0, 1, 2}

s.add(3)
print(s)
# {0, 1, 2, 3}

Alih keluar elemen daripada set:discard(),remove(),pop(),clear()

Untuk mengalih keluar elemen daripada set, gunakan kaedah buang(), buang(), pop(), dan clear().

Kaedah buang() memadamkan elemen yang dinyatakan dalam hujah. Jika nilai yang tidak wujud dalam set ditentukan, tiada apa yang dilakukan.

s = {0, 1, 2}

s.discard(1)
print(s)
# {0, 2}

s = {0, 1, 2}

s.discard(10)
print(s)
# {0, 1, 2}

Kaedah remove() juga mengalih keluar elemen yang dinyatakan dalam hujah, tetapi ralat KeyError dikembalikan jika nilai yang tidak wujud dalam set ditentukan.

s = {0, 1, 2}

s.remove(1)
print(s)
# {0, 2}

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

Kaedah pop() mengalih keluar elemen daripada set dan mengembalikan nilainya. Tidak boleh memilih nilai yang hendak dialih keluar. Set kosong akan mengakibatkan ralat KeyError.

s = {2, 1, 0}

v = s.pop()

print(s)
print(v)
# {1, 2}
# 0

s = {2, 1, 0}

print(s.pop())
# 0

print(s.pop())
# 1

print(s.pop())
# 2

# print(s.pop())
# KeyError: 'pop from an empty set'

Kaedah clear() mengalih keluar semua elemen dan menjadikan set kosong.

s = {0, 1, 2}

s.clear()
print(s)
# set()

Wasset (penggabungan, kesatuan):|pengendali,union()

Set kesatuan (penggabungan, kesatuan) boleh diperolehi dengan | operator atau kaedah kesatuan().

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}

s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}

Berbilang argumen boleh ditentukan untuk kaedah. Selain jenis set, senarai dan tupel yang boleh ditukar kepada jenis set mengikut set() juga boleh ditentukan sebagai argumen. Perkara yang sama berlaku untuk pengendali dan kaedah seterusnya.

s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}

s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}

Set produk (bahagian biasa, persimpangan, persimpangan):& pengendali,intersection()

Set produk (bahagian biasa, persimpangan dan persimpangan) boleh diperolehi dengan & operator atau kaedah persimpangan().

s_intersection = s1 & s2
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}

pelengkap relatif:-pengendali,difference()

Set perbezaan boleh diperolehi dengan kaedah – operator atau perbezaan().

s_difference = s1 - s2
print(s_difference)
# {0}

s_difference = s1.difference(s2)
print(s_difference)
# {0}

s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}

set perbezaan simetri:^ pengendali,symmetric_difference()

Set perbezaan simetri (set elemen yang terkandung dalam hanya satu daripada dua) boleh diperolehi dengan operator ^ atau symmetric_difference().

Bersamaan dengan disjungsi eksklusif (XOR) dalam operasi logik.

s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}

s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}

subset atau tidak:<= pengendali,issubset()

Untuk menentukan sama ada set ialah subset bagi set lain, gunakan <= operator atau kaedah issubset().

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

Kedua-dua <= operator dan kaedah issubset() kembali benar untuk set yang setara.

Untuk menentukan sama ada ia subset benar, gunakan operator <=, yang mengembalikan palsu untuk set yang setara.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

Set atas atau tidak:>= pengendali,issuperset()

Untuk menentukan sama ada satu set ialah superset yang lain, gunakan operator >= atau issuperset().

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

Kedua-dua >= operator dan kaedah issuperset() kembali benar untuk set yang setara.

Untuk menentukan sama ada ia adalah superset benar, gunakan operator >=, yang mengembalikan palsu untuk set yang setara.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

Penentuan sama ada mereka saling unggul atau tidak:isdisjoint()

Untuk menentukan sama ada dua set adalah prima antara satu sama lain, gunakan kaedah isdisjoint().

s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True