藉助集合和生成器實現
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
a = [5,5,2,1,9,1,5,10]
print(a)
print(list(dedupe(a)))
[5, 5, 2, 1, 9, 1, 5, 10]
[5, 2, 1, 9, 10]
def buha(items,key = None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
a = [
{'x':2,'y':3},
{'x':1,'y':4},
{'x':2,'y':3},
{'x':2,'y':3},
{'x':10,'y':15}
]
print(a)
print(list(buha(a,key = lambda a:(a['x'],a['y']))))
[{‘x’: 2, ‘y’: 3}, {‘x’: 1, ‘y’: 4}, {‘x’: 2, ‘y’: 3}, {‘x’: 2, ‘y’: 3}, {‘x’: 10, ‘y’: 15}]
[{‘x’: 2, ‘y’: 3}, {‘x’: 1, ‘y’: 4}, {‘x’: 10, ‘y’: 15}]
import sys
def fibonacci(n): # 生成器函數 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
print(f)
print(list(f))
# while True:
# try:
# print (next(f), end=" ")
# except StopIteration:
# sys.exit()
<generator object fibonacci at 0x1080df570>
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]