做Python123平台上的列表去重题,复述题目:

去除列表中的重复元素,考虑以下几种情况:

l = [1, 1, 2, 3]

l = [[1], [1], [2], [3]]

l = [3, 2, 1, 1]

原文链接:

14025

总结一下网上的方法和我自己想的方法:

不考虑列表去重之后的元素顺序

return list(set(l))

由于集合元素的唯一性,集合可以去重,但是集合的元素是无序的,转换成列表之后原来的列表的元素顺序会变化,在评判时不通过。并且第二项还会报错

TypeError: unhashable type: 'list'

考虑到列表类型元素unhashable的问题,可以先把每个元素转换成字符串,去重之后再去掉引号

a = [str(element) for element in l]

b = list(set(a))

duplicatedList = [eval(element) for element in b]

return duplicatedList

考虑到元素顺序问题,可以这样写(参考链接:

链接

duplicatedList.sort(key=l.index)

return duplicatedList

列表的index函数的用法是

list.index(x[, start[, end]])

x --- 要查找的元素

start --- 查找开始的位置

end --- 查找结束的位置

sort方法的key参数的意义是主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

我的理解是,从去重之后的列表duplicatedList中取出一个元素,在l中找第一次出现的位置(索引),以这个索引为依据排序duplicatedList的元素。语法上等效于

duplicatedList.sort(key=lambda x:l.index(x))

这仅是我个人的理解,原作者没解释。如果我说的不对欢迎讨论。

使用字典的fromkeys方法,第二项报unhashable错误

参考:

链接

# fromkeys 以列表的元素作为字典的键,把所有的键都赋同样的值(如果不指定则默认赋值为None)

lst1 = []

dct = dict.fromkeys(l)

# 对字典的每一个键,字典的键是唯一的

for n in dct:

lst1.append(n)

return lst1

或者

return list(dict.fromkeys(l))

以下三种方法对于元素unhashable的情况依然有效

枚举l的每个元素,如果没在新列表里出现,则加在新列表的末尾,否则(重复了)不追加

new_lst = []

for v in l:

if v not in new_lst:

new_lst.append(v)

return v

使用enumerate函数枚举

平台的官方答案之一

#更简洁的写法是

return [value for index, value in enumerate(l) if value not in l[:index] ]

#其意义是枚举列表每个元素(设索引为index,值为value),

#如果value没有在l[0:index]中出现过(没重复)则value加入到新列表中,如果重复就不追加

#如果还是看不懂,看下面的拆解版

r = []

for idx, value in enumerate(l):

if value not in l[:idx]:

r.append(value)

return r

基于索引遍历列表

r = []

for idx in range(len(l)):

if l[idx] not in r:

#或者if l[idx] not in l[:idx]:

r.append(l[idx])

# 也可写作

return [l[idx] for idx in range(len(l)) if l[idx] not in l[:idx]]

python去重复功能_消除Python列表重复的几种方法,python,去,一些相关推荐

  1. python 虚拟mac地址_随机生成MAC地址的N种方法

    进期准备在virt cli管理下的KVM增加一个模板脚本,用于主机的快速安装与部署.这里就涉及到mac地址的自动生成.uuid/Guid值的生成.主机名的自动更改等问题.本文着重介绍下N种自动生成MA ...

  2. 百钱买百鸡python编程列表推导式_使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?...

    [程序题]编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n [单选题]患者男,67岁.确诊为原发性支气管肺癌,为行手术 ...

  3. 《 Python List列表全实例详解系列(三)》——列表添加元素(4种方法)

    < Python List列表全实例详解系列(三)> --列表添加元素(4种方法) 接上一篇:< Python List 列表全实例详解(二)>__访问列表元素(索引和切片)列 ...

  4. 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)

    < Python List 列表全实例详解系列(九)> __列表反转(6种方法) 本章目录: 十一.列表反转的6种方法 (11.1).通过列表的切片操作实现列表反转 (11.2).使用列表 ...

  5. Python列表去重的几种方法和实例

    Python列表去重的几种方法和实例 在 Python 中,列表去重有多种方法,下面分别介绍这些方法的实现. 方法一:使用 set() 函数 set() 函数可以将列表转换成集合,集合中不允许有重复的 ...

  6. Python对列表去重的4种方法

    Python对列表去重的4种方法 列表 去重 开发中对数组.列表去重是非常常见的需求,对一个list中的id进行去重,有下面几种方法,前面两种方法不能保证顺序, 后面两种方法可以保持原来的顺序. 下面 ...

  7. python列表去重的两种方法

    python列表去重的两种方法 1. 使用循环进行遍历,将重复的元素去掉. def test1():lst = [1,2,5,6,3,5,7,3]tmp = []for it in lst:if it ...

  8. python如何删除代码_Python列表删除的三种方法代码分享

    1.使用del语句删除元素 >>> i1 = ["a",'b','c','d'] >>> del i1[0] >>> prin ...

  9. python numpy读取数据_大神教你python 读取文件并把矩阵转成numpy的两种方法

    导读 今天小编就为大家分享一篇python 读取文件并把矩阵转成numpy的两种方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 在当前目录下: 方法1: file = open( ...

最新文章

  1. 查看tcp各个连接状态的数量
  2. struts2之ModelDriven的使用
  3. java web filter标签是什么,Java Web:5.Filter
  4. Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列
  5. nginx 反向代理之 proxy_redirect
  6. python 列表 移除_python:列表中多元素的删除(移除)
  7. Linux内核构建与开发
  8. @scheduled 执行一次_Spring Boot 定时任务 @Scheduled
  9. apache kafka系列之server.properties配置文件参数说明
  10. Android学习Tabhost、gallery、listview、imageswitcher
  11. 从哪儿摔倒,从哪儿爬起
  12. 性能测试中问题反思和心得
  13. vue 调用虚拟键盘
  14. linux进化树分析的软件,一款好用的进化树可视化编辑软件
  15. 网络:网络地址到虚拟地址的映射ARP
  16. 农民股神六万元博出千万身家
  17. IE11兼容ES6语法问题
  18. 创建标准化工程目录脚本
  19. 只需一个DOM,纯CSS实现线性跑马灯特效
  20. css web页面实现一个弹窗

热门文章

  1. Spring MVC教程
  2. Spring Boot&Angular 5&Spring Data&Rest示例(CRUD)
  3. swingworker_使用SwingWorker的Java Swing中的多线程
  4. http缓存管理器_小心缓存管理器
  5. JavaFX实际应用程序:SkedPal
  6. Gradle接口:Gradle构建元数据
  7. 如何使用Play框架为https配置SSL证书
  8. 单元测试线程代码的5个技巧
  9. 使用Spring 3引导Web应用程序
  10. axios代理跨域 cli4_跨域本质及解决办法