この記事では主に Python でリストから重複を削除するさまざまな方法を紹介します。必要な友人はそれを参照してください。
今日、同僚からの何気ないアドバイスを受けて、itertools を使用しました。グループバイ機能。しかし、これは結局使われませんでした。
問題は、リスト内のニュース ID を重複排除した後、順序を変更しない必要があることです。
直感的な方法
最も単純なアイデアは次のとおりです:
コードをコピーしますコードは次のとおりです:
ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids
これも実行可能ですが、見た目が十分ではありません。
setを使用する
もう1つの解決策はsetを使用することです:
コードをコピーしますコードは次のとおりです:
ids = [1,4,3,3,4,2,3,4,5,6,1] ids = list(set(ids))
結果は、元の順序が維持されません。
インデックスで再度並べ替えます
最終的にこの方法で解決します:
コードをコピーします コードは次のとおりです:
ids = [1,4,3,3,4,2,3,4,5,6,1] news_ids = list(set(ids)) news_ids.sort(ids.index)
itertools.grouby を使用します
記事の冒頭で itertools.grouby について言及しましたそうでない場合は、リストの順序を考慮する場合は、これを使用できます:
コードをコピーします コードは次のとおりです:
ids = [1,4,3,3,4,2,3,4,5,6,1] ids.sort() it = itertools.groupby(ids) for k, g in it: print k
itertools.groupby の原理については、ここで参照できます: http:/ /docs.python.org/2/library/itertools.html#itertools.Netizen groupby
が追加されました: Use Reduce
Netizen realk は別の解決策についてのメッセージを残しました。ここに追加して説明します:
コードをコピー コードは次のとおりです:
In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1] In [6]: func = lambda x,y:x if y in x else x + [y] In [7]: reduce(func, [[], ] + ids) Out[7]: [1, 4, 3, 2, 5, 6]
上記は ipython で実行するコードです。ラムダ x,y:x if y in x else x + [y ] など。ラムダ x,y の原子価: x および x の y または x+[y] 。
そのアイデアは、まず ID を [[]、1、4、3、...] に変更してから、reduce 機能を使用することです。 Reduce の説明については、こちらを参照してください: http://docs.python.org/2/library/functions.html#reduce
以上がPythonでリストから重複を削除するいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。