Hulk

Set

Hulk (set)

  • Hulk (Set) on järjestamata elementide kollektsioon
  • Hulgas ei ole kordusi
  • Hulga elemente ei saa indeksi järgi pärida
  • Hulga elemendid peavad olema muutumatud (immutable)
  • Hulk ise on muutuv (elemente saab lisada, eemaldada)
  • Hulgaga saab teostada matemaatilisi hulga operatsioone

Hulga loomine Pythonis

  • Hulga saab luua loogeliste sulgudega {}
my_set = {1, 2, 3}
print(my_set)   # {1, 2, 3}
  • Tühja hulga saab luuba set() funktsiooniga
empty_set = set()
print(empty_set)  # set()

Hulga loomine järjendist

  • Hulga võib luua olemasolevast järjendist:
numbers = [1, 2, 3]
numbers_set = set(numbers)
print(numbers_set)  # {1, 2, 3}
  • Hulka jäävad vaid unikaalsed elemendid
numbers = [1, 2, 3, 1, 4, 2]
numbers_set = set(numbers)
print(numbers_set)  # {1, 2, 3, 4}

Hulgas vaid muutumatud objektid

  • Hulka ei saa panna muutuvaid objekte
my_set = {1, "tere", [1, 2]}
  • See annab vea: TypeError: unhashable type: 'list'
  • List võib programmi jooksul muutuda, seepärast seda hulgas ei saa kasutada
  • Seega saab kasutada: sõne, arvud, tõeväärtus, ennik, None jt

Elementide lisamine hulka

  • Elemendi lisamine: add()
numbers = {1, 2, 3}
numbers.add(4)
print(numbers)  # {1, 2, 3, 4}
numbers.add(1)
print(numbers)  # {1, 2, 3, 4}
  • Mitme elemendi lisamine: update()
numbers = {1, 2, 3}
numbers.update([1, 2, 3, 4])
print(numbers)  # {1, 2, 3, 4}
numbers.update({1, 8})
print(numbers)  # {1, 2, 3, 4, 8}

Elemendi eemaldamine hulgast

  • Elemendi eemaldamine discard(), ignoreerib puuduvat elementi
numbers = {1, 2, 3}
numbers.discard(1)
print(numbers)  {2, 3}
numbers.discard(6)  # <- 6 does not exist, no error
print(numbers)  {2, 3}
  • Elemendi eemaldamine remove() - puuduva elemendi puhul viga
numbers = {1, 2, 3}
numbers.remove(1)
print(numbers)  # {2, 3}
numbers.remove(6)  # <- error

Elementide kättesaamine

  • Kuna hulga elemendid pole järjestatud, ei saa neid indeksiga pärida
  • Ühe (suvalise) elemendi saab kätte meetodiga pop()
    • See ühtlasi eemaldab selle elemendi hulgast
numbers = {4, 7, 1}
one_number = numbers.pop()
print(one_number)   # 1 
print(numbers)      # {4, 7}

Hulga kasutamine tsüklis

  • Hulga elemente saab kätte tsükliga
  • Saadavate elementide järjekord ei ole garanteeritud
numbers = {4, 1, 6}
for number in numbers:
    print(number)
1
4
6

Huga operatsioon: ühend

  • Ühend (union) - kõik elemendid, mis kuuluvad ühte või teise hulka või mõlemasse
a = {1, 2, 3}
b = {3, 4, 5}
print(a.union(b))  # {1, 2, 3, 4, 5}
print(a | b)  # {1, 2, 3, 4, 5}

Hulga operatsioon: ühisosa

  • Ühisosa (intersection) - kõik elemendid, mis kuuluvad mõlemasse hulka
a = {1, 2, 3}
b = {2, 3, 4, 5}
print(a.intersection(b))  # {2, 3}
print(a & b)  # {2, 3}

Hulga operatsioon: vahe

  • Vahe (difference) - kõik elemendid, mis kuuluvad esimesse hulka, aga ei kuulu teise hulka
a = {1, 2, 3}
b = {2, 3, 4, 5}
print(a.difference(b))  # {1}
print(a - b)  # {1}

Hulga operatsioon: sümmeetriline vahe

  • Sümmeetriline vahe (symmetric difference) - kõik elemendid, mis kuuluvad esimesse või teise hulka, aga ei kuulu mõlemasse
a = {1, 2, 3}
b = {2, 3, 4, 5}
print(a.symmetric_difference(b))  # {1, 4, 5}
print(a ^ b)  # {1, 4, 5}

Teisi hulga operatsioone

  • Hulga pikkus: len(my_set)
  • Sõne tähed hulgaks: my_set = set("hello") annab hulga {'l', 'o', 'e', 'h'}
  • Kas element on hulgas: 'h' in my_set annab True
my_set = set("hello")
print(len(my_set))  # 4
print('h' in my_set)  # True
print('u' in my_set)  # False

Hulga kokkuvõte

  • Hulk sisaldab unikaalseid elemente
  • Hulka saab lisada vaid muutumatuid (immutable) objekte
  • Hulk pole järjestatud, elemente ei saa võtta indeksi järgi
  • Hulgaga saab sooritada matemaatilisi hulga operatsioone
names = ["john", "jane", "mary", "jane", "john", "smith", "monica"]

print(f"There are {len(names)} names in the list")
# There are 7 names in the list

print(f"There are {len(set(names))} unique names in the list")
# There are 5 unique names in the list