Ich habe eine Liste von Dauern wie unten
['5d', '20h', '1h', '7m', '14d', '1m']
wo d
steht für Tage, h
steht für Stunden und m
steht für Minuten.
Ich möchte die höchste Dauer aus dieser Liste erhalten ( 14d
in diesem Fall). Wie kann ich das aus dieser Liste von Zeichenfolgen erhalten?
python
python-3.x
Rafiul Sabbir
quelle
quelle
Antworten:
Reine Python-Lösung. Wir konnten speichern Mapping zwischen unseren Zeiterweiterungen (
m
,h
,d
) und Minuten (hiertime_map
), längere Haltbarkeit zu finden. Hier verwenden wirmax()
mitkey
Argument, um unser Mapping anzuwenden.quelle
np.argmax
ampd.to_timedelta
:pd.to_timedelta
wandelt eine Zeichenfolge in eine Dauer ( Quelle ) um undnp.argmax
gibt den Index des höchsten Elements zurück.quelle
Hier ist ein absoluter Hack, der das Problem auf eine schlechte, aber clevere Weise löst: Pythons
min
undmax
Funktionen können mit einerkey
Funktion verwendet werden, die zum Vergleichen von Elementen verwendet wird, sodass das Element zurückgegeben wird, das diese Funktion minimiert oder maximiert. Wenn diekey
Funktion ein Tupel zurückgibt, wird die Reihenfolge durch die erste Komponente des Tupels bestimmt, wobei die zweite Komponente als Verbindungsunterbrecher verwendet wird.Wir können die Tatsache , dass die letzten Zeichen ausnutzen
'd'
,'h'
und'm'
können in alphabetischer Reihenfolge verglichen werden; a d ay ist länger als eine Stunde unseres länger als eine ist m inute. Dies bedeutet, dass die längste Dauer das minimale Zeichen in alphabetischer Reihenfolge hat, wobei die maximale Ganzzahl als Gleichstand dient. Das Maximieren dieser Ganzzahl entspricht dem Minimieren der Negation:quelle
s
und Wochen alsW
und Monate als dargestellt habenM
, und es würde immer noch funktionieren; Der Hack bricht ab, wenn Sie Jahre entwedery
oderY
angeben. Es hängt auch davon ab, dass es keine Zeiträume gibt, in10000000m
denen stattdessen eine größere Einheit verwendet werden könnte. Ich gehe davon aus, dass die Zeichenfolgen die Ausgabe einer API sind, die immer die größtmögliche Einheit verwendet.Ausgabe:
Nützlich für diesen bestimmten Satz von Zeichenfolgen, aber wenn sich das Format unterscheidet, muss das erste Element des Tupels entsprechend angepasst werden. Gerade jetzt macht es Sinn , weil
s
>m
>h
>d
.quelle
Hier ist eine Lösung mit regulären Ausdrücken
quelle
Vorausgesetzt, Ihre Zeiten sind gut geformt, können Sie die
max
basierend auf einem einzelnen regulären Ausdruck finden:Der reguläre Ausdruck erzeugt ein Tupel von Tagen, Stunden, Minuten als Zeichenfolgen. Das
tuple(map(int, ...))
konvertiert es in ganze Zahlen.max
wählt das größte dieser Tupel aus, das natürlich Tage stärker als Stunden schwerer als Minuten wiegt.quelle
Ein möglicher Weg:
Ausgabe
quelle