Operacje na zbiorach

Zadanie 11 z 13 · rozdział 10Trudność: 1 z 3zbiorysetlisty

Treść zadania

Wczytaj dwie listy liczb całkowitych i zamień każdą z nich na zbiór: $A$ (z listy 1) i $B$ (z listy 2). Powtórzenia elementów w listach znikają, bo zbiór przechowuje każdą wartość tylko raz.

Wypisz:

  1. sumę zbiorów $A \cup B$ (elementy należące do $A$ lub do $B$),
  2. część wspólną $A \cap B$ (elementy należące do $A$ i do $B$),
  3. różnicę $A \setminus B$ (elementy $A$, których nie ma w $B$),
  4. różnicę symetryczną (elementy należące do dokładnie jednego ze zbiorów),
  5. odpowiedź na pytanie, czy $A$ jest podzbiorem $B$ (czy każdy element $A$ należy do $B$).

Dane wejściowe

  • 1. linia: lista 1 — liczby całkowite oddzielone spacjami
  • 2. linia: lista 2 — liczby całkowite oddzielone spacjami

Dane wyjściowe

Pięć linii:

  • linie 1–4: wyniki działań 1–4 jako listy posortowane rosnąco, wypisane przez print(sorted(...)), np. [1, 2, 5]; pusty wynik to [],
  • linia 5: Tak, jeśli $A$ jest podzbiorem $B$, w przeciwnym razie Nie.

Uwagi

  • Zbiór tworzysz z listy funkcją set, np. set([2, 2, 1]) to zbiór {1, 2}.
  • Działania na zbiorach w Pythonie: A | B (suma), A & B (część wspólna), A - B (różnica), A ^ B (różnica symetryczna), A <= B (czy $A$ jest podzbiorem $B$ — wynik True lub False).
  • Zbiór nie pamięta kolejności elementów, dlatego przed wypisaniem zamień go na posortowaną listę: sorted(A | B).

Przykłady

Wejście
1 2 3 4 2
3 4 5
Wyjście
[1, 2, 3, 4, 5]
[3, 4]
[1, 2]
[1, 2, 5]
Nie
Wejście
2 2 1
1 2 3
Wyjście
[1, 2, 3]
[1, 2]
[]
[3]
Tak

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 10

Zadania w tym rozdziale ćwiczą jednoczesną pracę na dwóch listach (lub dwóch napisach traktowanych jak ciągi znaków): łączenie, porównywanie, przechodzenie po indeksach i scalanie list posortowanych. Pod koniec rozdziału poznasz zbiory (set) — kolekcje bez powtórzeń, które pozwalają jednym działaniem wyznaczyć część wspólną, sumę czy różnicę dwóch list — oraz funkcje zip i enumerate, ułatwiające przechodzenie po dwóch ciągach naraz.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj listę:”.
  • Każda lista zajmuje na wejściu jedną linię, a jej elementy są oddzielone pojedynczymi spacjami, np. 5 3 7 2. Najpierw podana jest lista 1, w następnej linii lista 2. Każda lista ma co najmniej jeden element.
  • Listę liczb całkowitych wczytasz tak: lista = [int(x) for x in input().split()] (dla liczb zmiennoprzecinkowych użyj float zamiast int).
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie: w nawiasach kwadratowych, elementy oddzielone przecinkiem i spacją, np. [1, 2, 3]. Pusta lista to [].
  • Gdy treść mówi o elementach „oddzielonych przecinkami bez spacji”, wypisz je w jednej linii, np. 5,1,3, bez przecinka na końcu — np. print(*lista, sep=",").

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
5
5
Oczekiwane wyjście
[5]
[5]
[]
[]
Tak

Test 2

Nie uruchomiono
Wejście
1 2
3 4
Oczekiwane wyjście
[1, 2, 3, 4]
[]
[1, 2]
[1, 2, 3, 4]
Nie

Test 3

Nie uruchomiono
Wejście
3 1 2
2 3 1
Oczekiwane wyjście
[1, 2, 3]
[1, 2, 3]
[]
[]
Tak

Test 4

Nie uruchomiono
Wejście
-1 0 7 7 -1
0 8 -5
Oczekiwane wyjście
[-5, -1, 0, 7, 8]
[0]
[-1, 7]
[-5, -1, 7, 8]
Nie

Test 5

Nie uruchomiono
Wejście
4 6
1 2 3 4 5 6 7
Oczekiwane wyjście
[1, 2, 3, 4, 5, 6, 7]
[4, 6]
[]
[1, 2, 3, 5, 7]
Tak

Test 6

Nie uruchomiono
Wejście
1 2 3 4 5 6 7
4 6
Oczekiwane wyjście
[1, 2, 3, 4, 5, 6, 7]
[4, 6]
[1, 2, 3, 5, 7]
[1, 2, 3, 5, 7]
Nie
Uruchom z własnymi danymi