Start | setset
 

SET (MÄNGDER)



Set är engelska för mängd. Poängen med denna datatyp är att göra det möjligt att betrakta data som mängder. Set har optimerade funktioner för olika mängdoperationer. T.ex. snitt, union, differens osv.

Mängder skrivs inom krullparenteser { ... } - till skillnad från listor som skrivs inom hakparenteser [ ... ].

Exempel mängder

A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} print("Detta är en mängd ", A)

Unionen av 2 mängder


Unionen av 2 mängder är samma sak som att slå ihop dem och ta bort dubbletter (finns inga dubbletter i mängder). Man kan också se det som en logisk eller. Tänk såhär: Det räcker att ett element finns i någon av mängderna för att få tillhöra unionen.
A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} B = {"Potatis","Rödbeta","Vete","Ax"} C = A | B print(C)
Samma sak som
A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} B = {"Potatis","Rödbeta","Vete","Ax"} C = A.union(B) print(C) C = B.union(A) print(C)


en mängd minus en annan


Vi kan ta elementen i en mängd minus elementen i en annan mängd.
A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} B = {"Potatis","Rödbeta","Vete","Ax"} C = A - B print(C)
Du kan använda antingen - eller difference(). Observera att med minus är såklart A - B inte samma sak som B - A.
A = {"a","b","c","d","e","f","g"} B = {"h","i","j","k","e","f","g"} print(A.difference(B)) print(B.difference(A))

set(x)


Med set(x) kan du konvertera t.ex. en lista till ett set. Vid konverteringen försvinner dubbletter i listan och efter konverteringen har du tillgång till de metoder som ett set erbjuder. Observera att i en mängd så har elementen ingen ordning, de ligger i en hög så att höga. I en lista där ligger elementen i en bestämd ordning med ett index. Denna ordning försvinner när man konverterar en lista till en mängd.

Exempel: vaska fram unika


Exempel på praktiskt användning av set är om du har en lista med många ord och du vill vaska fram alla unika ord i listan. Genom att konvertera listan till set så försvinner genast multiplar, då en mängd enbart tillåter ett element av varje. Därefter kan du konvertera tillbaka till lista om du vill.
massa_frukt = [ "äpple","banan","äpple", "apelsin","apelsin","päron","körsbär", "äpple","paprika"] print(massa_frukt) unika = set(massa_frukt) print(unika) unika = list(unika) print(unika)
Ett exempel till med siffror. Vi konverterar till set och sedan tillbaka till lista och vips har vi alla unika.
siffror = [1,2,3,4,4,3,2,1,2,3,4,6,5,5,5,3,2,2,1,2,3] unika = list(set(siffror)) print(unika)

snittet mellan 2 mängder



Säg att vi vill veta snittet mellan 2 mängder, dvs vad 2 mängder har gemensamt.
A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} B = {"Potatis","Rödbeta","Vete","Ax"} gemensamt = A.intersection(B) print(gemensamt)
Du kan också använda operatorn &
A = {"Äpple","Päron","Tomat","Potatis","Rödbeta"} B = {"Potatis","Rödbeta","Vete","Ax"} gemensamt = A & B print(gemensamt)
Det här att du kan använda | (bitvis eller -operatorn) eller & (bitvis och -operator) är fullt begripbart om (när) du läst om bitvis logik. Då ser du att och samt eller i mängdlära är precis samma sak som om du har 2 stycken bit -mönster mellan vilka du använder & eller |. Så, du borde se snittet här direkt.
A = {1,2,3} B = {2,3,4} gemensamt = A & B print(gemensamt)

Packa upp med * stjärnoperator

Man kan tänka på stjärnoperatorn som att den packar upp set, dvs plockar bort {} kvar är bara en serie data (tal, strängar, annat). Den upp-packade mängden kan du sedan paketera på nytt i något annat sammanhang.
set1 = {1,2,3,4,5,6,7,8,9} set2 = {7,8,9,10,11} kombinerad = {*set1,*set2} print(kombinerad)

* stjärnoperator med print


Det kan också vara användbart packa upp set'et vid utskrifter.
a = { "Lisa", "Anna", "Kalle", "Richard", "Moa", "Olle" } print(a)
Ovan utskrift är vad vi hade fått om vi bara printade ut tupeln. Studera resultatet nedan, när vi packa upp tupeln och skriver ut den.
a = { "Lisa","Anna","Kalle","Richard","Moa","Olle" } print(*a)
Vi kan ändra sep som normalt är mellanrum, till nyrad.
a = {"Lisa","Anna","Kalle","Richard","Moa","Olle"} print(*a, sep='\n')

inbyggda mängdfunktioner

Klicka för mer exempel hur dessa inbyggda mängdfunktioner fungerar.

clear(it)Rensar allt i en mängd
copy(it)Skapar kopia
add(it)Lägger till objekt i mängd
difference(it)Mängd A - B
difference_update(it)Som difference men uppdaterar
discard(it)Tar bort element
intersection(it)Snitt mellan 2 mängder
intersecation_update(it)Som ovan men uppdaterar
isdisjoint(it)Har ämngderna ngt gemensamt?
issubset(it)Är A delmängd av B?
issuperset(it)A innehåller B?
remove(it)Tar bort element
symmetric_difference(it)Union minus snitt
symmetric_difference_update(it) Som ovan + uppdatera
union(it)Union av A och B
update(it)Lägg till mängd till mängd
set(it)Skapar mängd från tex lista

Lite frågor

Hur skriver man unionen av {1,2,3} och {2,3,4} och vad blir svaret?
  {1,2,3} + {2,3,4} = {1,2,3,4}
  {1,2,3} & {2,3,4} = {2,3}
  {1,2,3} | {2,3,4} = {1,2,3,4}
  {1,2,3} & {2,3,4} = {1,2,3,4}
Hur skriver man snittet av {1,2,3} och {2,3,4} och vad blir svaret?
  {1,2,3} + {2,3,4} = {1,2,3,4}
  {1,2,3} & {2,3,4} = {1,2,3,4}
  {1,2,3} & {2,3,4} = {2,3}
  {1,2,3} | {2,3,4} = {1,2,3,4}
Hur skriver man differensen av {1,2,3} och {2,3} och vad blir svaret?
  {1,2,3} + {2,3} = {1,2}
  {1,2,3} - {2,3} = {1}
  {1,2,3} & {2,3} = {3,4}
  {1,2,3} | {2,3} = {2,3,4}
Tentafråga: Vad händer om du kör koden set('python') == set('typhoon'). Motivera svaret.
  Error
  True
  False
  None


13.075828552246 ms