Python jämföra värden i tuppel

Här diskuteras programmering och utveckling
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

Python jämföra värden i tuppel

Inlägg av Chippen »

Jag undrar om det finns någon smidig funktion för att jämför värden i en tuppel. Alltså säg att jag har en tuppel med 5 värden, då vill jag i första hand kunna ta reda på om alla 5 värden är lika eller om dem är olika.

vill inte behöva skriva:

Kod: Markera allt

if r[0] == r[1] == r[2] == r[3] == r[4]: 

för det blir lite fult och jobbigt.  :P
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Python jämföra värden i tuppel

Inlägg av Okänd »

Du skulle ju alltid kunna skriva en funktion som jämnför dom åt dig.
Funktionen returnerar då Sant om alla stämmer annars Falskt.

Om Python stödjer operator överlagring så kan du lösa det på det sättet.

Men jag kodar själv inte med Python så jag vet inte om det finns nån inbyggd funktion.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Python jämföra värden i tuppel

Inlägg av Lars »

Något sådant här kanske:

Kod: Markera allt

def all_same(seq):
    return all(map(lambda x: x == seq[0], seq))
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

SV: Python jämföra värden i tuppel

Inlägg av Chippen »

Jag är ledsen lars, jag är fortfarande nybörjare, har du lust att förklara raden "all(map(lambda x: x == seq[0], seq))" lite närmare?
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Python jämföra värden i tuppel

Inlägg av Lars »

Det är kanske lite överkurs, men just därför är det kul :)

lambda x: x == seq[0] är en funktion utan namn. Den tar ett argument x och returnerar resultatet av "x == seq[0]", d.v.s. True eller False.

map(f, seq) är detsamma som (f(seq[0]), f(seq[1]) ... f(seq[n-1])). Argumentet seq kan vara en lista, en tuple eller någon annan sekvens, resultatet blir av samma typ.

Så map(lambda x: x == seq[0], seq) ger alltså något i stil med (True, False, True, True). Första värdet i listan blir alltid sant eftersom vi jämför med seq[0] hela tiden.

Funktionen all(seq) returnerar helt enkelt True om alla värden i sekvensen är sanna, annars False.

Lambda och map kommer från LISP/Scheme, de används väldigt mycket där och kanske inte så ofta i Python. Men de är väldigt smidiga för att bearbeta listor.
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

SV: Python jämföra värden i tuppel

Inlägg av Chippen »

Jag har försökt förstå ett par gånger, men det funkar inte riktigt. Jag tror detta får vänta tills jag har mognat lite :P
Användarvisningsbild
Victor
Inlägg: 425
Blev medlem: 12 okt 2006, 19:08
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Lund

SV: Python jämföra värden i tuppel

Inlägg av Victor »

Jag lånar tråden lite då detta är nästan det jag vill göra, dock vill jag inte veta om de är exakt lika med varandra utan kolla om de är lika med en if-sats. Funktionen ska kolla alla andra värden och jämföra det med det utvalda på ett så smidigt sätt som möjligt.. Hjälp?

EDIT: Ska tillägga att jag läser ur en fil som kan vara ganska stor. Hur gör jag på bästa sätt för att optimera?

EDIT2: Den ska hoppa över det värdet som jämförs med alla andra.. (ett som är konstant genom loopen, om det nu ska vara en loop(?))
Senast redigerad av 1 Victor, redigerad totalt 3 gånger.
// So long, and thank you for all the fish

"Your Ubuntu User number is # 10448"
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: Python jämföra värden i tuppel

Inlägg av Smygis »

Victor skrev: Jag lånar tråden lite då detta är nästan det jag vill göra, dock vill jag inte veta om de är exakt lika med varandra utan kolla om de är lika med en if-sats. Funktionen ska kolla alla andra värden och jämföra det med det utvalda på ett så smidigt sätt som möjligt.. Hjälp?

EDIT: Ska tillägga att jag läser ur en fil som kan vara ganska stor. Hur gör jag på bästa sätt för att optimera?

EDIT2: Den ska hoppa över det värdet som jämförs med alla andra.. (ett som är konstant genom loopen, om det nu ska vara en loop(?))
Nu förstår jag inte riktigt. Vad är det du vill? Speciellt "dock vill jag inte veta om de är exakt lika med varandra utan kolla om de är lika med en if-sats." makes no sense to me.

Jag förstår att du har en lista med tal. Plockar ut ett tal ur den listan. Sedan ska den på något sätt gämföras med resten. Men hur?
typ:

Kod: Markera allt

for i in lista:
    if i == tal:
         # Här hamnar all kod.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
Victor
Inlägg: 425
Blev medlem: 12 okt 2006, 19:08
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Lund

SV: Python jämföra värden i tuppel

Inlägg av Victor »

Oj, trodde att jag tagit bort min post.. Jag kan säga såhär, jag är trött och var ännu tröttare när jag skrev inlägget. Kontentan är att jag inte fick det att funka  just då men efter en rejäl lunch kom jag på det så jag har löst det nu. Tack ändå :)
// So long, and thank you for all the fish

"Your Ubuntu User number is # 10448"
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

SV: Python jämföra värden i tuppel

Inlägg av Chippen »

Smygis skrev:
Victor skrev: Jag lånar tråden lite då detta är nästan det jag vill göra, dock vill jag inte veta om de är exakt lika med varandra utan kolla om de är lika med en if-sats. Funktionen ska kolla alla andra värden och jämföra det med det utvalda på ett så smidigt sätt som möjligt.. Hjälp?

EDIT: Ska tillägga att jag läser ur en fil som kan vara ganska stor. Hur gör jag på bästa sätt för att optimera?

EDIT2: Den ska hoppa över det värdet som jämförs med alla andra.. (ett som är konstant genom loopen, om det nu ska vara en loop(?))
Nu förstår jag inte riktigt. Vad är det du vill? Speciellt "dock vill jag inte veta om de är exakt lika med varandra utan kolla om de är lika med en if-sats." makes no sense to me.

Jag förstår att du har en lista med tal. Plockar ut ett tal ur den listan. Sedan ska den på något sätt gämföras med resten. Men hur?
typ:

Kod: Markera allt

for i in lista:
    if i == tal:
         # Här hamnar all kod.

Det där är ju ett lättare sätt för att göra det jag vill också... jag kan ju helt sonika skapa en while-slinga där i är mindre än antalet i tuppeln sedan jämför jag det första värden emot ...tack
Skriv svar

Återgå till "Programmering och webbdesign"