鱼C论坛

 找回密码
 立即注册
查看: 830|回复: 0

[技术交流] cookbook 1.10

[复制链接]
发表于 2022-1-18 12:44:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

对序列中移除重复项且保持元素间顺序不变

问题描述:
        去掉重复元素,但其中的原始顺序不变

一、可哈希的序列
可哈希:在生存期期间不变,有__hash__方法
如整型,字符串,元组,浮点数
  1. def dequpe(items):
  2.     seen = list()
  3.     for i in items:
  4.         if i not in seen:
  5.             yield i
  6.             seen.append(i)
  7. # 列表可以实现


  8. a = [1, 1, 2, 3, 4, 5, 4, 5, 6, 2, 7, 10]
  9. print(list(dequpe(a)))
复制代码
[1, 2, 3, 4, 5, 6, 7, 10]


二、不可哈希或比较复杂的数据结构
  1. def dequpe_plus(items, key=None):
  2.     seen = list()
  3.     for i in items:
  4.         val = i if key is None else key(i)
  5.         if val not in seen:
  6.             yield i
  7.             seen.append(val)


  8. b = [{"a": 1, "b": 2}, {"a": 2, "b": 1}, {
  9.     "a": 1, "b": 2}, {"a": 3, "b": 3}, {"a": 1, "b": 4}]
  10. print(list(dequpe_plus(b, key=lambda d: (d["a"], d["b"]))))  # a,b值不重复
  11. print(list(dequpe_plus(b, key=lambda d: d["a"])))  # a的值不重复
复制代码
[{'a': 1, 'b': 2}, {'a': 2, 'b': 1}, {'a': 3, 'b': 3}, {'a': 1, 'b': 4}]
[{'a': 1, 'b': 2}, {'a': 2, 'b': 1}, {'a': 3, 'b': 3}]

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表