辽宁快乐12孤号: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. | 阅读量: 56290, 53333

今天遇到一个问题,在同事随意的提示下,用了 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程序员杂谈



其他分类:
  • 女子谎称刷单提成骗贫困大学生16万 用于买化妆品 2018-12-01
  • 西安体育学院体育传媒系与西部网签约校媒合作 2018-12-01
  • 网络投票刷礼物能不能帮孩子“争上游”? 2018-11-28
  • 中共山西省委组织部公示 2018-11-28
  • 【北京天气】最新北京今天天气,实时提供北京气温、空气质量、24小时天气预报、生活指数查询 2018-11-24
  • 格局生变 内容产业未来何去何从 2018-08-18
  • 土地不是劳动成果,而是一种自然资源,就像空气、阳光不是劳动成果而是自然资源一样,所以土地不具有价值,买房只应支付房屋费,不应该支付土地费。 2018-08-14
  • 安全生产月:铁路安全宣传走进车站 2018-08-02
  • 带动乡亲干 各自有实招——三位农村社区党组织书记的故事 2018-08-02
  • 长江中下游正式“入梅”!中东部高温降雨齐上阵 湖北中北部有大到暴雨 2018-07-31
  • 2018年4月27日划拨国家社科基金项目鉴定费名单(2) 2018-07-31
  • [微笑]未来的社会,必然是按需(基本需求)分配+按劳(劳动价值或劳动能力)分配相联合的混合分配方式。 2018-07-30
  • “一带一路”建设工作座谈会 2018-07-30
  • 只要等一等就能多“等”出8600万美元! 2018-07-29
  • 2017年秋季学期学员第十三支部风采 2018-07-18
  • 814| 528| 701| 467| 938| 391| 405| 993| 28| 713|