2010-10-10 21 views
5

Ich habe eine Liste:Wie überprüft man, ob Elemente in der Liste nur einmal in Python erscheinen?

a = [1, 2, 6, 4, 3, 5, 7] 

Bitte, mir zu erklären, wie zu überprüfen, ob Element in der Liste nur einmal angezeigt wird?

Bitte erläutern Sie auch, ob alle Elemente von 1 bis len(a) in der Liste sind. Zum Beispiel in der Liste 'a' Element von 1 bis 7 sind in der Liste, aber wenn die Liste b = [1, 4, 3, 5] ist, dann sind nicht alle Elemente von 1 bis 4 nicht in der Liste.

Vielen Dank!

+1

Was meinst du mit * dann nicht alle Elemente von 1 bis 4 sind nicht überprüfen In der Liste*? Woher kommt * 1 bis 4 *? –

+0

Für Ihre erste Frage, möchten Sie überprüfen, ob * jedes * Element nur einmal erscheint, oder ob ein * spezifisches * Element nur einmal in der Liste vorkommt? –

Antwort

4
len(set(a)) == len(a) 

für die erste Frage, und

(len(set(a)) == len(a) == max(a)) and min(a) == 1 

für die zweite.

+0

Die zweite Antwort erfordert, dass alle Elemente in "a" ganze Zahlen sind. – jfs

+1

Ich hätte das gerne mehr, wenn es im Pep8 Stil geschrieben wäre. So wie es aussieht, sieht der Code schrecklich aus. –

+0

@ J.F.Sebastian: Ja, aber ich nahm das einfach von der Frage an :) - @Blue Peppers: Tut mir leid, aber ich benutze zu viele verschiedene Sprachen, um für jeden einen anderen Codierungsstil zu haben; und so mag ich es am liebsten. – poke

5

Für Ihre erste Frage, wenn Ihre Elemente sind hashable Sie eine Menge, die die Elemente enthält, erstellen und überprüfen Sie seine Länge:

len(set(a)) == len(a) 

Alternativ können Sie diese Funktion verwenden, die eine bessere Leistung als die oben geben kann, wenn das Ergebnis Falsch ist (aber schlechte Leistung, wenn das Ergebnis stimmt):

def are_all_elements_unique(l): 
    seen = set() 
    for x in l: 
     if x in seen: 
      return False 
     seen.add(x) 
    return True 
5

wenn ich Ihre Frage gelesen, ich habe eine andere Bedeutung von ihm als Marke hatte. Wenn Sie nur dann, wenn ein bestimmtes Element überprüfen möchten einmal erscheint, dann

def occurs_once(a, item): 
    return a.count(item) == 1 

wird wahr sein, nur wenn item in der Liste genau einmal vorkommt.

Siehe Pokes Antwort auf die zweite Frage

+0

Gehen Sie nicht davon aus, dass die Liste keine doppelten enthält? Außerdem sollten Sie nicht nur überprüfen, ob jedes Element in 'range (1, n + 1)' in 'a' steht? –

+0

'Bereich' ist ein Generator in neueren Pythons. – poke

+0

Oh ich sehe, ich denke wir haben die Frage anders verstanden. Ich dachte, alle Zahlen von "1 - n" sollten in der Liste enthalten sein, unabhängig von der Reihenfolge und Position, und können auch mit anderen Zahlen gemischt werden. –

1

i verstanden Sie etwas wie folgt aus:

[x for x in a if a.count(x) == 1] 
3

Für die zweite Frage, die Sie wollen vielleicht

sorted(a) == range(1, len(a) + 1) 
Verwandte Themen