1.删除序列相同元素并保持顺序如果仅仅就是想消除重复元素通常可以简单的构造一个集合利用集合之间元素互不相同的特性就可以消除重复但是这种方法生成的结果中元素的位置会被打乱。下面是我们的解决方案1234567defdedupe(items, keyNone):seenset()foriteminitems:valitemifkeyisNoneelsekey(item)ifvalnotinseen:yielditemseen.add(val)主要思想就是构造一个集合然后遍历该列表如果当前元素不存在集合中就将该元素返回。yiled时python中构造生成器的关键字。碰到yiled就返回该变量下一次则从yiled之后的语句开始执行。使用示例注我们构造的dedupe函数返回的是生成器对象需要用list转化成可直接输出的列表。该函数也可以用来文件去除重复行123withopen(my.log,r) as f:foritemindedupe(f):print(item)2.过滤元素序列问题--------你有一个数据序列想利用一些规则从中提取出需要的值或者是缩短序列方法一最简单的过滤序列元素的方法就是使用列表推导。比如我们想从下列列表中提取正数123mylist[1,4,-5,10,-7,2,3,-1]newlist[nforninmylistifn 0]print(newlist)方法二生成器迭代使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集占用大量内存。 如果你对内存比较敏感那么你可以使用生成器表达式迭代产生过滤的元素。1234mylist[1,4,-5,10,-7,2,3,-1]pos(nforninmylistifn 0)print(pos)print(list(pos))#迭代器不可以直接输出需要转换成list才可以看到结果运行结果方法三过滤规则比较复杂不能简单的在列表推导或者生成器表达式中表达出来时需要考虑使用内建的filter函数。这时候你可以将过滤代码放到一个函数中 然后使用内建的 filter() 函数。示例如下12345678910values[1,2,-3,-,4,N/A,5]defis_int(val):try:xint(val)returnTrueexceptValueError:returnFalseivalslist(filter(is_int, values))print(ivals)# Outputs [1, 2, -3, 4, 5]