2016-03-30 5 views
-2

Ich habe eine Liste aufgestellt, so (aber größer):Entfernen und ähnliche Artikel aus der Liste basiert auf 'Versionsnummer' in Python

[item_101.1.txt, item_101.2.txt, item_134.1 .txt, item_134.2.txt, item_134.3.txt, item_134.4.txt]

Also, wenn es eine "item_101. .txt", das hier „item_101. . txt "wird überflüssig und ich möchte es aus der Liste entfernen. Analog sollte "item_134. .txt" verbleiben, aber item_134. .txt, item_134. .txt, item_134. .txt sollte entfernt werden.

Aber ich kann dies nicht innerhalb einer for-Schleife tun, weil das auf einer pro Stück Basis geht.

Irgendwelche Ideen? Irgendwelche Konzepte, die ich untersuchen sollte?

Danke Jungs!

+0

Da die Elemente die gleiche allgemeine Struktur haben, würde ich versuchen, 'item_xxx.x.txt.split tun (‚‘)' und auf diese Weise würde ich in der Lage das erste Element für Redundanz zu überprüfen . – gamda

Antwort

0

Da das klingt wie es Hausaufgaben sein könnte, ich werde einfach die Struktur eines Algorithmus zur Verfügung stellen:

  • eine Funktion definieren, die die Zeichenfolge analysieren kann, die Wurzel des Dateinamens zurückkehrt, und die Versionsnummer. Sie sollten wahrscheinlich die Versionsnummer als Ganzzahl anstelle einer Zeichenfolge zurückgeben. Verwenden Sie würde in etwa so aussehen, vorausgesetzt, sie immer TXT-Datei-Erweiterungen sein werden:

    > extract_version('item_101.2.txt') 
    ('item_101', 2) 
    
  • Mit dieser Funktion können auf alle Ihre Eingaben, Rückkehr etwas wie folgt aus:

    [('item_101', 1), ('item_101', 2), ('item_134', 1), ... ] 
    
  • Schleife durch dass die Liste, von der höchsten Versionsnummer für jede in einem Wörterbuch zu verfolgen:

    for fname, version in version_list: 
        if fname not in highest_version: 
         highest_version[fname] = version 
        else: 
         highest_version[fname] = max(highest_version[fname], version) 
    
  • Nachdem diese Schleife läuft, wird HIGHEST_VERSION Conta in den maximalen Versionsnummern für jeden Dateinamen. Sie können das Wörterbuch durchlaufen und die Dateinamen neu erstellen. Beachten Sie, dass sie sich möglicherweise in einer anderen Reihenfolge als zuvor befinden. Daher müssen Sie sie möglicherweise nach Ihren Kriterien sortieren.

    for fname, version in highest_version.items(): 
        highest_version_list.append(fname + '.' + str(version) + '.txt' 
    
+0

Danke Jungs! Das hat super funktioniert, ich habe beide Beispiele in mein Skript übernommen –