浙江网站建设哪家好,建设银行官方网站手机版下载安装,免费做网站视频,武义网站建设做Python123平台上的列表去重题#xff0c;复述题目#xff1a;
去除列表中的重复元素#xff0c;考虑以下几种情况#xff1a;
l [1, 1, 2, 3]
l [[1], [1], [2], [3]]
l [3, 2, 1, 1]
原文链接#xff1a;
14025
总结一下网上的方法和我自己想的方法#xff1a;
不考…做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(keyl.index)
return duplicatedList
列表的index函数的用法是
list.index(x[, start[, end]])
x --- 要查找的元素
start --- 查找开始的位置
end --- 查找结束的位置
sort方法的key参数的意义是主要是用来进行比较的元素只有一个参数具体的函数的参数就是取自于可迭代对象中指定可迭代对象中的一个元素来进行排序。
我的理解是从去重之后的列表duplicatedList中取出一个元素在l中找第一次出现的位置索引以这个索引为依据排序duplicatedList的元素。语法上等效于
duplicatedList.sort(keylambda 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]]