/ / Видалення подібних елементів зі списку на основі "номера версії" в Python - python, список, дублікати, версія

Видалення подібних елементів зі списку на основі "номера версії" в Python - python, list, duplicates, version

У мене є список, як це (але більше):

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

Отже, коли є "item_101".2.txt ", це тут" item_101.1.txt "стає зайвим, і я хочу вилучити його зі списку. Точно так само" item_134.4.txt "має залишитися, але item_134.3. Txt, item_134.2. Txt, item_134.1.txt слід видалити.

Але я не можу зробити це в рамках циклу для циклу, оскільки це стосується кожного елемента.

Будь-які ідеї? Будь-які поняття, які я повинен розглянути?

Спасибі, хлопці!

Відповіді:

0 для відповіді № 1

Оскільки це звучить як це може бути домашньою роботою, я просто збираюся надати структуру алгоритму:

  • Визначте функцію, яка може розібрати рядокповернення кореня імені файлу та номера версії. Можливо, ви повинні повернути номер версії як ціле, а не рядок. Використання буде виглядати приблизно так, якщо вони завжди матимуть розширення файлів .txt:

    > extract_version("item_101.2.txt")
    ("item_101", 2)
    
  • Використовуйте цю функцію на всіх входах, повертаючи щось на зразок цього:

    [("item_101", 1), ("item_101", 2), ("item_134", 1), ... ]
    
  • Поволіть через цей список, відстежуючи найвищий номер версії для кожного в словнику:

    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)
    
  • Запустивши цей цикл, the highest_version будемістять максимальні номери версій для кожного імені файлу. Ви можете зациклювати словник і перебудувати імена файлів. Зауважте, що вони можуть бути в іншому порядку, ніж раніше, тому вам може знадобитися сортувати їх за вашими критеріями.

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