2016-02-29 3 views
9

Angenommen, ich habe ein Listenobjekt, das sowohl mit Zahlen als auch mit Strings belegt ist. Wenn ich das erste Zeichenfolgenelement mit der höchsten alphabetischen Priorität abrufen möchte, wie würde ich dies tun? HierFinden Sie das erste Objekt mit alphabetischer Priorität in der Liste mit den Nummern

ist ein Beispiel Versuch, die eindeutig falsch ist, aber korrigiert, was um geändert werden muss für sie das gewünschte Ergebnis erzielen würde sehr geschätzt werden:

lst = [12, 4, 2, 15, 3, 'ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

lst.sort() 
for i in lst: 
    if i[0] == "A": 
     answer = i 
print(answer) 
+3

Was ist 'sortiert ([i für i in lst wenn isinstance (i, str)]) [0]'? –

+3

Sie können diese Liste nicht ohne Filterung in Python3 sortieren, da Sie 'int' und' str' Typen nicht mehr vergleichen können –

Antwort

8

IIUC Sie isinstance nutzen könnten, um sublist Ihrer ursprünglichen Liste mit nur Strings bekommen, dann mit sorted durch alphabetische Sortierung erstes Element erhalten:

sub_lst = [i for i in lst if isinstance(i, str)] 
result = sorted(sub_lst)[0] 


print(sub_lst) 
['ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

print(result) 
'ALLIGATOR' 

Oder könnten Sie min verwenden, wie @ TigerhawkT3 im commen vorgeschlagen t:

print(min(sub_lst)) 
'ALLIGATOR' 
+8

Oder 'min()' anstelle von 'sorted() [0]'. – TigerhawkT3

+3

Hinweis: Das Erstellen der Liste (für die Sortierung erforderlich) erfordert O (N) Leerzeichen und das Sortieren erfordert dann O ((N log N) Vergleiche. Andererseits erfordert die Verwendung von 'min' für einen Generatorausdruck nur O (1) Leerzeichen und O (N) Vergleiche –

15

zuerst eine generator expression verwenden nicht-Strings, um herauszufiltern, und dann min() verwenden, um die Zeichenfolge mit dem höchsten alphabetisch Präsenz zu wählen:

>>> min(x for x in lst if isinstance(x, str)) 
'ALLIGATOR 
+0

@AntonProtopopov, ich weiß nicht, was Sie mit "zuerst in Liste umgewandelt" meinen –

5

Eine andere Möglichkeit ist es, die Hauptliste filtern lst von intergers filter integrierte Methode verwendet:

>>> min(filter(lambda s:isinstance(s, str), lst)) 
'ALLIGATOR' 
Verwandte Themen