zbior w tablicy

0

hej,
Mam problem.
Mam taką tablice ze zbiorami w środku: [ [{'A'}, {'B'}], [{'XQ'}, {'C'}], [{'B,C'}, {'A'}] ]

jak mam napisać pętlę to tej tablicy, żeby porównać ze sobą wybrany zbiór i żeby ten kod działał?

Mój kod:
dom={A}
for i in tab:
if ((tab[i])[0]).issubset(dom):
dom = dom.union((tab[i])[1])
else: break;
print(dom)

pokazuje mi sie komunikat, że ten if ma byc integer or slice, not list

0

Sformatuj kod i Popraw błędy, Mogłeś chociaż jakiś debug print wstawić, żeby się dowiedzieć, co to to magiczne ((tab[i])[0]). Chociaż nie wiem czy to podejście w ogóle będzie działać.
"jak mam napisać pętlę to tej tablicy, żeby porównać ze sobą wybrany zbiór" - co to znaczy? Zbiór dom ma być porównywany z wybranym zbiorem z listy, ze wszystkimi? Gdyby Twój kod zadziałał, to porównałby dom z pierwszym zbiorem pierwszej podlisty i jak jest podzbiorem to dodałby do niego drugi zbiór; i tak dalej aż do momentu, gdy nie będzie podzbiorem (wtedy break). Poza tym Masz paskudnego buga, raz Traktujesz i, jako element tablicy, a raz jako indeks. Spróbuj chociaż:
for i, elem in enumerate(tab):

0
lion137 napisał(a):

Sformatuj kod i Popraw błędy, Mogłeś chociaż jakiś debug print wstawić, żeby się dowiedzieć, co to to magiczne ((tab[i])[0]). Chociaż nie wiem czy to podejście w ogóle będzie działać.
"jak mam napisać pętlę to tej tablicy, żeby porównać ze sobą wybrany zbiór" - co to znaczy? Zbiór dom ma być porównywany z wybranym zbiorem z listy, ze wszystkimi? Gdyby Twój kod zadziałał, to porównałby dom z pierwszym zbiorem pierwszej podlisty i jak jest podzbiorem to dodałby do niego drugi zbiór; i tak dalej aż do momentu, gdy nie będzie podzbiorem (wtedy break). Poza tym Masz paskudnego buga, raz Traktujesz i, jako element tablicy, a raz jako indeks. Spróbuj chociaż:
for i, elem in enumerate(tab):

To jeden z moich pierwszych programów w ogóle i niestety nie widzę co mam źle. :(
Generalnie robię projekt, żeby wypisać domknięcia bazy danych i mam takie wejście:

wejscie:
A,B,C,QX

3
A->B
XQ->C
B,C->A

Wyjście:

Domknięcia:

{A}+ = {A, B}
{B}+ = {B}
{C}+ = {C}
{QX}+ = {C, QX}
{A, B}+ = {A, B}
{A, C}+ = {A, B, C}
{B, C}+ = {A, B, C}
{A, QX}+ = {A, B, C, QX}        <- Minimalny klucz kandydujący
{B, QX}+ = {A, B, C, QX}        <- Minimalny klucz kandydujący
{C, QX}+ = {C, QX}
{A, B, C}+ = {A, B, C}
{A, B, QX}+ = {A, B, C, QX}     <- Nadklucz
{A, C, QX}+ = {A, B, C, QX}     <- Nadklucz
{B, C, QX}+ = {A, B, C, QX}     <- Nadklucz
{A, B, C, QX}+ = {A, B, C, QX}  <- Nadklucz

Mój kod https://pastebin.com/nt0aW8b4

To jest jeszcze w proszku jak widać. Miałam zamysł taki, żeby to, co jest pomiędzy strzałką, było zbiorem i później robić operacje na zbiorach. t[i][0] to potencjalne odwołanie do lewej części strzałki. Jak mam to ogarnąć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1