2016-03-30 4 views
-2

の「バージョン番号」に基づいてリストから関連商品を削除:私はこのようなリスト、(より大きな)を持っているの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]

ので、 "item_101。 .TXT"、ここでこれは「item_101。があるとき。 txt "が冗長になり、リストから削除したいのです。同様に、「item_134。 .txt」はそのまま残すべきですが、item_134です。 .txt、item_134。 .txt、item_134。 .txtを削除する必要があります。

しかし、私はforループ内でこれを行うことはできません。なぜなら、これはアイテムごとに処理するためです。

アイデア?私が調べなければならないコンセプトは何ですか?

ありがとうございました!

+0

項目が同じ一般的な構造を持っているので、私は(「」) '' item_xxx.x.txt.splitをやってみますと、そのように私は、冗長性のための最初の要素をチェックすることができるだろう。 – gamda

答えて

0

それは宿題かもしれないように、これが聞こえるので、私はアルゴリズムの構造を提供するつもりです:

  • は、ファイル名のルートを返し、文字列を解析することができます関数を定義し、バージョン番号を入力します。おそらく、バージョン番号を文字列ではなく整数として返すようにしてください。

    > extract_version('item_101.2.txt') 
    ('item_101', 2) 
    
  • ご入力のすべての使用この機能を、このような何かを返す:を通じて

    [('item_101', 1), ('item_101', 2), ('item_134', 1), ... ] 
    
  • ループを使用すると、彼らは常に、.txtファイルの拡張子になるだろうと仮定すると、次のようになりますそのリストは、辞書にそれぞれの最高のバージョン番号を追跡することは:

    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) 
    
  • このループを実行した後、HIGHEST_VERSIONはコンタます各ファイル名の最大バージョン番号で指定します。辞書をループしてファイル名を再構築することができます。それらは以前とは異なる順序であるかもしれないので、あなたの基準に基づいてそれらを並べ替える必要があるかもしれないことに注意してください。

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

ありがとうございました!うまくいきました。これらの例を両方ともスクリプトに適用しました –