今日問題が発生し、同僚からの何気ないプロンプトの後、 itertools.groupby 関数を使用しました。しかし、これは結局役に立たなかった。
問題は、リスト内のニュース 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://www.php.cn/
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 で実行するコードです。 ここで、 lambda x,y:x if y in x else x + [y] は lambda x ,y と同等です。 : x および x または x+[y] 内の y。
実際には、最初に ID を [[]、1、4、3、...] に変更してから、reduce 機能を使用するというアイデアです。 Reduce の説明については、こちらを参照してください: http://docs.python.org/2/library/functions.html#reduce
リスト構造内の値の Python 重複排除の詳細については、次の点に注意してください。 PHP中国語ウェブサイトです!