##方法一:先排序后比较大小
if List:
List.sort()
last = List[-1]
for i in range(len(List)-2, -1, -1):
if last==List[i]:
del List[i]
else:
last=List[i]
问题:为什么要从后往前迭代呢?我们可以从list[0]开始啊,代码如下:
if List:
List.sort()
begin = List[0]
for i in range(1, len(list)):
if begin==List[i]:
del List[i]
else:
begin=List[i]
运行一下,报错如下:
IndexError: list index out of range
数组访问越界了!why?
我们调用del删除list里的元素,相应的list的长度也会自动减小,但我们迭代的范围range(1, len(list))是一开始就计算好的,所以必然会越界。比如说:
li = [1,1,2,2,3,3,3,4,5,6]
调用len计算得到li的长度为10,range(1,10)得到我们迭代的序列是1-9,但是当我们删除了li中的重复元素1,2,3之后,li的长度只剩下了6,可是我们依然会访问li[7],因为访问序列一开始就计算好了,所以必然造成了越界。
那从后向前是如何避免越界的呢?从后向前遍历,删除元素后,只是把这个元素之后的已经没有重复元素的序列向前移动一位,数组依然在变短,但这个时候是不会影响到我们向前遍历的。
##方法二:使用set
>>> li = [1,2,4,5,7,8,2,3,4,56,7]
>>> list(set(li))
>>> [1, 2, 3, 4, 5, 7, 8, 56]
##方法三:使用列表综合
l1 = ['b','c','d','b','c','a','a']
l2 = []
[l2.append(i) for i in l1 if not i in l2]
print l2