Operacje na zbiorach
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:
- sumę zbiorów $A \cup B$ (elementy należące do $A$ lub do $B$),
- część wspólną $A \cap B$ (elementy należące do $A$ i do $B$),
- różnicę $A \setminus B$ (elementy $A$, których nie ma w $B$),
- różnicę symetryczną (elementy należące do dokładnie jednego ze zbiorów),
- 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 razieNie.
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$ — wynikTruelubFalse). - Zbiór nie pamięta kolejności elementów, dlatego przed wypisaniem zamień go na posortowaną listę:
sorted(A | B).
Przykłady
1 2 3 4 2 3 4 5
[1, 2, 3, 4, 5] [3, 4] [1, 2] [1, 2, 5] Nie
2 2 1 1 2 3
[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żyjfloatzamiastint). - 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.
Przywrócono Twój zapisany kod.
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 uruchomiono5 5
[5] [5] [] [] Tak
Test 2
Nie uruchomiono1 2 3 4
[1, 2, 3, 4] [] [1, 2] [1, 2, 3, 4] Nie
Test 3
Nie uruchomiono3 1 2 2 3 1
[1, 2, 3] [1, 2, 3] [] [] Tak
Test 4
Nie uruchomiono-1 0 7 7 -1 0 8 -5
[-5, -1, 0, 7, 8] [0] [-1, 7] [-5, -1, 7, 8] Nie
Test 5
Nie uruchomiono4 6 1 2 3 4 5 6 7
[1, 2, 3, 4, 5, 6, 7] [4, 6] [] [1, 2, 3, 5, 7] Tak
Test 6
Nie uruchomiono1 2 3 4 5 6 7 4 6
[1, 2, 3, 4, 5, 6, 7] [4, 6] [1, 2, 3, 5, 7] [1, 2, 3, 5, 7] Nie