• Register

Množice in Python

+1 vote
109 views

Pozdravljeni!

zanima me zakaj pri množicah, če navedem teoretičen primer ker kopiranje konkretnih vprašanj ni dovoljeno:

A = {1,3,5,7,9,10} in B = {2,3.0,6,8,10}

python smatra števili 3 in 3.0 kot različna pojma, saj če naredim množico C ki predstavlja presek množice A in B dobim C ={3.0,10} in ne C = {3,10}. Zanima me kako se takim napakam izognemo? Naprimer rešitev bi bila C = {3,10}, python pa po defaultu zada množico C={3.0,10}.

V naprej se zahvaljujem za odgovor.

asked Mar 3 by zigazupanc (180 points)

1 Answer

+4 votes
 
Best answer

Živjo, mogoče ti lahko pomagam, sem imel enako težavo, pa sem ugotovil tole:

V primeru, da imaš v množici A npr. element 8.0 (torej element tipa float) in v množici B npr. element 8 (element tipa integer), bo rezultat preseka množice (se pravi npr. C = A & B) element iz druge množice, v tem primeru integer:

Primer 1:

A = {1, 4, 8.0, 9}

B = {2, 4, 8, 10}

C = A & B

--> Za rezultat boš dobil: C = {8, 4}

 

Primer 2 (elementi iz B so sedaj v A in obratno):

A = {2, 4, 8, 10}

B = {1, 4, 8.0, 9}

C = A & B

--> Za rezultat boš dobil: C = {8.0, 4}

Pri sebi sem problem rešil tako, da sem ustvaril dodatno (začasno) množico D, ter vse elemente iz množice C prenesel v D, med tem pa sem jih še pretvoril v tip integer. Primer:

A = {2, 4, 8, 10} # množica A ima vse elemente tipa integer
B = {1, 4, 8.0, 9} # množica B pa ima 3. element tipa float
C = A & B
print(C)

D = set() # tukaj sem ustvaril novo, prazno množico D
for element in C:
    D.add(int(element)) # funkcija prenese vsak element iz C v D in ga vmes spremeni v tip 'integer'

C = D # sedaj ima tudi množica C vse elemente tipa 'integer'
del D # še zbrišemo množico D iz spomina (ni nujno potrebno, vendar vseeno zaželeno)
print(C)

 

Upam da ti kaj pomaga...pa še en nasvet, uporabljaj slog iz PEP8 :)

answered Mar 4 by andrazgasar (520 points)
selected Mar 4 by dgorjup
...