python列表去重不改变顺序_python集合去重

[python中对list去重的多种方法

怎么快速的对列表进行去重呢,去重之后原来的顺序会不会改变呢?

1.以下的几种情况结果是一样的,去重之后顺序会改变:

i = [1,2,3,3,4,2,3,4,5,6,1]

news_i= []

for id in i:

if id not in news_i:

news_i.append(id)

print news_i

或用set

i= [1,4,3,3,4,2,3,4,5,6,1]

i= list(set(ids))

或使用itertools.grouby

import itertools

i = [1,4,3,3,4,2,3,4,5,6,1]

i.sort()

it = itertools.groupby(i)

for k, g in it:

print k

In [5]: i = [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, [[], ] + i)

Out[7]: [1, 4, 3, 2, 5, 6]

其中的 lambda x,y:x if y in x else x + [y] 等价于 lambda x,y: y in x and x or x+[y] 。

思路其实就是先把i变为[[], 1,4,3,......] ,然后在利用reduce的特性.

去列表去重,不改变原来的顺序,还可以使用一个空列表把原列表里面不重复的数据"装起来",例如:

list2 = []

list1 = [1,2,3,2,2,2,4,6,5]

for i in list1:

if i not in list2:

list2.append(i)

list2

[1, 2, 3, 4, 6, 5]

或者使用删除元素索引的方法对列表去重,并且不改变原列表的顺序

# python for删除的时候会往前移(垃圾回收机制),未遍历到的后一个占了前一个被删除的"位置",导致这个数不会被遍历到,而使最后的结果错误

# 局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间;

# 如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环。

# 所以使用while循环删除nums中的Val(的下标)

nums = [1,2,3,3,4,2,3,4,5,6,1]

val = 3

while val in nums:

nums.pop(nums.index(val))

print nums

return len(nums)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值