ホームページ  >  記事  >  バックエンド開発  >  Pythonはリスト構造内の値の重複を排除します

Pythonはリスト構造内の値の重複を排除します

高洛峰
高洛峰オリジナル
2017-03-02 17:08:391380ブラウズ

今日問題が発生し、同僚からの何気ないプロンプトの後、 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中国語ウェブサイトです!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。