Python中list去重

list去重

在进行list去重之前,我们先来学习一下dict的key值和value值的遍历操作。

1、dict的key值遍历
定义一个字典,如下:
dict1 = {1:"jack",2:"cindy",3:"ruby"}
>>> for val in dict1.keys():
...   print val,
...
1 2 3
2、 dict的value值遍历
#方法一:
>>> for val in dict1.values():
...   print val,
...
jack cindy ruby
#方法二:
>>> for val in dict1.keys():
...   print dict1[val],
...
jack cindy ruby
list去重方法很多,但是效率最高,也最具技巧的算通过dict的key值唯一性,进行去重操作。
方法一:
通过dict内嵌函数dict.fromkeys(seq, var=None)直接将序列seq生成新的键值不重复的dict对象
#coding=utf-8  
def listP(list_old):  
    list_new = []  
    dict_new = {}  
    dict_new = dict.fromkeys(list_old,1)  #调用dict内嵌函数生成新的dict对象
    #将dict的key值直接转成list  
    list_new = list(dict_new.keys())
    return list_new   
list_old = [1,12,2,2,3,3,5,6]  
print "old_list:"  
for i in list_old:  
  print i,  
list_result = []  
list_result = listP(list_old)  
print "\nnew_list:"  
for i in list_result:  
  print i,  
方法二:
通过遍历需要排重的list,将list元素挨个追加到dict中
#coding=utf-8
def listP(list_old):
    j = 1
    list_new = []
    dict = {}
    for i in list_old:  #遍历list,并将元素追加到dict中
      dict[i] = j
    for k in dict.keys():
      list_new.append(k)
    return list_new 
list_old = [1,12,2,2,3,3,5,6]
print "old_list:"
for i in list_old:
  print i,
list_result = []
list_result = listP(list_old)
print "\nnew_list:"
for i in list_result:
  print i,
执行结果:
old_list:
1 12 2 2 3 3 5 6
new_list:
1 2 3 5 6 12
整体的思路:
首先通过将list的元素作为字典的key值存放到字典中,因为字典的key值是不能重复的,所以就起到去重的效果。
然后再把字典中的key值取出,存放到一个新的list,这个新的list就是去重后的新list。
2、利用list本身的方法去重
#coding=utf-8
def listP(list_old):
  list_new = []
  for i in list_old:
    if list_old.count(i) > 1:
      list_old.remove(i)
  return list_old

list_old = [1,2,3,3,4,6,4,7,1]
print "old_list:\n"
for i in list_old:
  print i,
list_result = listP(list_old)
print "\nnew_list:" 
for i in list_result:
  print i,
执行结果:
old_list:
1 2 3 3 4 6 4 7 1
new_list:
2 3 6 4 7 1








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值