辽宁福彩35开奖:the5fire的技术博客

彩票开奖查询 www.8a72.cn 关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


python对list去重的各种方法

作者:the5fire | 标签:     | 发布:2013-04-26 5:18 a.m. | 阅读量: 57360, 54354

今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数。不过这个东西最终还是没用上。

问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变。

直观方法

最简单的思路就是:

.. code:: python

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

另外一个解决方案就是用set:

.. code:: python

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))

这样的结果是没有保持原来的顺序。

按照索引再次排序

最后通过这种方式解决:

.. code:: python

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(key=ids.index)   # 感谢网友:@Magic 指正。

使用itertools.grouby

文章一开始就提到itertools.grouby, 如果不考虑列表顺序的话可用这个:

.. code:: python

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的原理可以看这里://docs.python.org/2/library/itertools.html#itertools.groupby

网友补充:用reduce

网友reatlk留言给了另外的解决方案。我补充并解释到这里:

.. code:: python

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: y in x and x or x+[y] 。

思路其实就是先把ids变为[[], 1,4,3,......] ,然后在利用reduce的特性。reduce解释参看这里://docs.python.org/2/library/functions.html#reduce

2017-05-15更新:

我录了一套Django开发的视频教程,有兴趣可以到我的公众号查看。

- from www.8a72.cn
----EOF-----

微信公众号:Python程序员杂谈



其他分类:
  • 特朗普下令美国防部组建第六军种“太空军” 2019-02-17
  • 标致1008假想图曝光 主打小型SUV市场 2019-02-11
  • 美俄掀起新一轮互相制裁风波。 2019-02-08
  • 荷兰成国旗最大购买地-热门标签-华商网数码 2019-02-08
  • 浅析网络视频主持人的语言特点 2019-01-27
  • 防弹少年团刷新自身纪录 破亿 MV 之首出炉! 点阅 2019-01-25
  • 人民日报创刊70周年,社长李宝善提了13个“不会忘记” 2019-01-22
  • 【理上网来喜迎十九大】郑永年:希望十九大成为中华民族复兴的一个伟大转折点 2019-01-15
  • 一周人事:黑龙江、浙江等7省份12名省委常委履新 2019-01-01
  • 女子谎称刷单提成骗贫困大学生16万 用于买化妆品 2018-12-01
  • 西安体育学院体育传媒系与西部网签约校媒合作 2018-12-01
  • 网络投票刷礼物能不能帮孩子“争上游”? 2018-11-28
  • 中共山西省委组织部公示 2018-11-28
  • 【北京天气】最新北京今天天气,实时提供北京气温、空气质量、24小时天气预报、生活指数查询 2018-11-24
  • 格局生变 内容产业未来何去何从 2018-08-18
  • 334| 34| 510| 311| 171| 295| 411| 387| 999| 3|