/ / Usuwanie podobnych pozycji z listy na podstawie "numeru wersji" w Pythonie - python, lista, duplikaty, wersja

Usuwanie podobnych pozycji z listy na podstawie "numeru wersji" w Pythonie - python, lista, duplikaty, wersja

Mam taką listę (ale większą):

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

Tak więc, gdy istnieje "item_101.2.txt ", to tutaj" item_101.1.txt "staje się zbędny i chcę go usunąć z listy." "item_134.4.txt "powinien pozostać, ale item_134.3.txt, item_134.2.txt, item_134.1.txt powinno zostać usunięte.

Ale nie mogę tego zrobić w pętli for, ponieważ dotyczy to pojedynczych elementów.

Jakieś pomysły? Jakieś koncepcje, na które powinienem zaglądać?

Dzięki chłopaki!

Odpowiedzi:

0 dla odpowiedzi № 1

Ponieważ brzmi to tak, jakby to była praca domowa, po prostu dostarczę strukturę algorytmu:

  • Zdefiniuj funkcję, która może parsować ciąg,zwracanie katalogu głównego nazwy pliku i numeru wersji. Prawdopodobnie powinieneś zwrócić numer wersji jako liczbę całkowitą zamiast łańcucha. Użycie byłoby wyglądać mniej więcej tak, zakładając, że zawsze będą to rozszerzenia plików .txt:

    > extract_version("item_101.2.txt")
    ("item_101", 2)
    
  • Użyj tej funkcji na wszystkich wejściach, zwracając coś takiego:

    [("item_101", 1), ("item_101", 2), ("item_134", 1), ... ]
    
  • Przeprowadź pętlę na tej liście, zachowując najwyższy numer wersji dla każdego ze słowników:

    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)
    
  • Po uruchomieniu tej pętli zostanie wykonana wersja najwyższego_wersjazawierają maksymalne numery wersji dla każdej nazwy pliku. Możesz przechodzić przez słownik i odbudowywać nazwy plików. Zauważ, że mogą one być w innej kolejności niż poprzednio, więc możesz potrzebować posortować je według swoich kryteriów.

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