2016-03-30 1 views
-2

J'ai une liste, comme celui-ci (mais plus):Suppression d'éléments similaires de la liste en fonction de 'numéro de version' en 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]

Alors, quand il y a un "item_101. txt", ce ici « item_101. . txt "devient redondant, et je veux l'enlever de la liste. De même, "item_134 . .txt" doit rester, mais item_134. .txt, élément_134. .txt, élément_134. .txt doit être retiré.

Mais je ne peux pas le faire dans une boucle for, car cela traite sur une base par article.

Des idées? Des concepts que je devrais examiner?

Merci les gars!

+0

Étant donné que les articles ont la même structure générale, je voudrais essayer de faire 'item_xxx.x.txt.split (« »)' et de cette façon, je serais en mesure de vérifier le premier élément pour la redondance . – gamda

Répondre

0

Comme cela semble que cela pourrait être devoirs, je vais juste fournir la structure d'un algorithme:

  • Définir une fonction qui peut analyser la chaîne, retourner la racine du nom de fichier, et le numéro de version. Vous devriez probablement l'avoir renvoyer le numéro de version sous la forme d'un entier, au lieu d'une chaîne. L'utilisation ressemblerait à quelque chose comme ça, en supposant qu'ils vont toujours les extensions de fichier txt:

    > extract_version('item_101.2.txt') 
    ('item_101', 2) 
    
  • Utilisez cette fonction sur toutes vos entrées, retourner quelque chose comme ceci:

    [('item_101', 1), ('item_101', 2), ('item_134', 1), ... ] 
    
  • boucle par cette liste, garder la trace du plus grand nombre de version pour chacun dans un dictionnaire:

    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) 
    
  • Après avoir exécuté cette boucle, HIGHEST_VERSION sera Conta dans les numéros de version maximum pour chaque nom de fichier. Vous pouvez parcourir le dictionnaire et reconstruire les noms de fichiers. Notez qu'ils peuvent être dans un ordre différent qu'avant, vous devrez peut-être les trier en fonction de vos critères.

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

Merci les gars! Cela a bien fonctionné, j'ai adapté ces deux exemples dans mon script –