2009-09-11, 15:48
  #1
Medlem
Jag har en instans av en klass som är en lista(vektor eller vad det nu kallas för), nu är det så att jag vill komma åt alla värden samtidigt för att kunna presentera dessa i en ordnad lista eller liknande. T:ex

bilar[] är en instans av klassen bil
- jag vill ha fram "self.pris" för alla poster samtidigt så jag kan sortera och presentera fallande från högsta pris.

Hur gör man detta på ett smidigt sätt?
Citera
2009-09-11, 17:04
  #2
Medlem
Rotmosrullens avatar
Jag skulle lösa det på det här sättet, men det finns säkert snyggare sätt.

Kod:
class Bil:
    def __init__(self,model,price):
        self.model=model
        self.price=price
    def __cmp__(self,other): # list.sort is going to call this overloaded method. Making it possible to sort instances of this class
        if self.price<other.price: return -1
        if self.price==other.price: return 0
        if self.price>other.price: return 1


bilar=[Bil("Volvo",2000),Bil("Saab",3000),Bil("Skoda",500),Bil("BMW",10000)]
bilar.sort()
bilar.reverse()
for bil in bilar:
    print bil.model+":",str(bil.price)+" sek"

Edit:
Oj, blev lite väl blandad svenska / engelska där, du förstår nog iaf
Citera
2009-09-11, 18:11
  #3
Medlem
Citat:
Ursprungligen postat av Unbildoed
Jag har en instans av en klass som är en lista(vektor eller vad det nu kallas för), nu är det så att jag vill komma åt alla värden samtidigt för att kunna presentera dessa i en ordnad lista eller liknande. T:ex

bilar[] är en instans av klassen bil
- jag vill ha fram "self.pris" för alla poster samtidigt så jag kan sortera och presentera fallande från högsta pris.

Hur gör man detta på ett smidigt sätt?

Du kan använda parametern 'key' till funktionen sort, tex om du har en lista 'bilar' av instanser av klassen 'Bil', som alla har ett attribut 'pris' (tex som i Rotmosrullens exempel), så kan du göra

Kod:
bilar.sort(key=lambda bil: bil.pris, reverse=True)

för att sortera listan bilar efter pris, i fallande ordning.

Om du bara vi ta ut en lista med alla priser för bilarna i 'bilar', kan du göra

Kod:
priser = [bil.pris for bil in bilar]
.
Citera
2009-09-12, 13:28
  #4
Medlem
nu blev det så att jag använde bilar.sort(key=operator.attrgetter()) vilket verkar fungera bra
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in