學習筆記 | 刪除列表中的重複元素並保持順序不變

藉助集合和生成器實現


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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章