2

私は次のようなファイルを持っています:

q12j4
q12j4
fj45j
q12j4
fjmep
fj45j

今私がやりたかったのは:

  • エントリが繰り返されているかどうかを確認し、
  • もしそうなら、エントリを一度印刷し、それらは繰り返されず、通常どおり印刷します。
    出力は次のようになります。

    q12j4  
    fj45j  
    fjmep  
    

    【繰り返し省略】

関数でやろうとしていましたdefaultdictが、文字列ではうまくいかないと思います。
助けてください..

4

4 に答える 4

3

これで大まかに十分です。

with open('file.txt', 'r') as f:
    for line in set(f):
        print line
于 2012-05-15T12:49:22.920 に答える
3
def unique(seq):
    seen = set()
    for val in seq:
        if val not in seen:
            seen.add(val)
            yield val

with open('file.txt') as f:
    print ''.join(unique(f))

ご覧のとおり、イテラブルから重複を削除する別のジェネレーターを作成することにしました。このジェネレータ はunique()、他の多くのコンテキストでも使用できます。

于 2012-05-15T12:46:26.233 に答える
2
seen = set()
with open(filename, 'r') as f:
    for line in f:
        if line not in seen:
            print line
            seen.add(line)
于 2012-05-15T12:45:54.243 に答える
0

itertools.groupby 関数を使用する必要があります。使用例については、標準ライブラリまたはこの関連する質問を参照してください: How do I use Python's itertools.groupby()?

エントリが繰り返されるリストを次のように仮定しtoorderます。

import itertools
toorder = ["a", "a", "b", "a", "b", "c"]

for key, group in itertools.groupby(sorted(toorder)):
    print key

出力する必要があります:

a
b
c
于 2012-05-15T12:43:46.897 に答える