可迭代对象去重(保持顺序不变)
def filter_multi(items,key=None):
"""
可迭代对象去重(保持顺序不变)
[1,4,7,2,4,7,3,5] ==> [1,4,7,2,3,5]
"""
its = list()
for x in items:
val = x if key is None else key(x)
if val not in its:
yield val
its.append(val)
#如:
print list(filter_multi([1,3,5,3,7,2,4,2]))
items = [{"a":1,"b":2},{"a":3,"b":4},{"a":1,"b":2},{"a":5,"b":6}]
print list(filter_multi(items,key=lambda k:(k["a"],k["b"])))
补充知识:Python特性学习――可迭代对象,迭代器(重新修正)
以前学习python都是马马虎虎,导致很多特性只是知道完全不会用,现在将他们重新学习
可迭代对象(Iterable)
简单来说,所有可以放入for循环中的对象都是可迭代对象,如列表,元组,字符串,字典…
如何判断对象是否是可迭代对象?
实际上,只要实现了__iter__方法的对象就是可迭代对象,这个方法用来返回迭代器本身(特别重要)。
eg:
>>> s = "dasda"
>>> s.__iter__()
python提供了方法判断是否是可迭代对象。
>>> from collections import Iterable
>>> isinstance(s,Iterable)
True
迭代器(Iterator)
似乎和上面的概念很相似。实际上,所有实现了__next__()方法的对象都是迭代器。所有实现了__next__()和__iter__()方法的对象都是迭代器,所以,所有的迭代器都能放入for循环。
python中原生的迭代器不多,可以使用iter()将可迭代对象生成迭代器。
eg:
>>> s = [1,2,3,4,5]
>>> s.__next__()
Traceba