辽宁快乐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. | 阅读量: 66804, 63404

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



其他分类:
  • 大众迈特威悠享版上市 国内限量260台 2019-06-16
  • 省国资运营公司机关召开党员大会选举产生第一届机关党委委员 2019-06-16
  • 本论坛上有位网名为“第十阶层1”的网友,你可问问他“阶层”与“阶级”有什么区别!呵呵! 2019-06-13
  • 国际在线:向世界报道中国,向中国报道世界 2019-06-06
  • 【理上网来喜迎十九大】美国丹佛大学孙晶:中国是世界“平稳的基石” 2019-06-06
  • 【清园20年】感恩大回馈!半价!半价! 2019-05-30
  • 詹姆斯不太可能加盟凯尔特人,但绿衫军将保持活跃 2019-05-30
  • 《中国海归人才吸引力》报告发布:“海外抢人大战”升温 2019-05-30
  • 黄河发源地青海“多管齐下”确保“一江清水向东流” 2019-05-28
  • 央视解读不动产登记体系全面运行 房价会下跌 2019-05-28
  • 关注改革最后一公里:湖北纪检等部门用新技术整合分散信息 2019-05-27
  • 中国三大球备战里约奥运 2019-05-27
  • “让劳动理念深入人心” 2019-05-25
  • 小米收购其韩国总代 在三星“后花园”落地 2019-05-24
  • 这个辅警,是朋友圈最能“吹”的人! 2019-05-24
  • 591| 245| 979| 578| 772| 556| 739| 598| 593| 954|