a = [1,2,2,3,3,4,5,6]
1、第一种方法
def get_unique_N(iterable, N):
"""Yields (in order) the first N unique elements of iterable.
Might yield less if data too short."""
seen = set()
for e in iterable:
if e in seen:
continue
seen.add(e)
yield e
if len(seen) == N:
return
k = get_unique_N([1,2,2,3,3,4,5,6], 4)
print(list(k))
输出结果:
[1,2,3,4]
2、第二种方法
文档:itertools unique_everseen recipe:
def unique_everseen_limit(iterable, limit=5):
seen = set()
seen_add = seen.add
for element in iterable:
if element not in seen:
seen_add(element)
yield element
if len(seen) == limit:
break
res = list(unique_everseen_limit(a)) # [1, 2, 3, 4, 5]
3、第三种方法
from itertools import islice
def unique_everseen(iterable):
seen = set()
seen_add = seen.add
for element in iterable:
if element not in seen:
seen_add(element)
yield element
res = list(islice(unique_everseen(a), 5)) # [1, 2, 3, 4, 5]
4、第四种方法
unique_everseen
配方可通过more_itertools.unique_everseen或在第三方库中使用toolz.unique,因此您可以使用:
from itertools import islicefrom more_itertools import unique_everseenfrom toolz import uniqueres = list(islice(unique_everseen(a), 5)) # [1, 2, 3, 4, 5]res = list(islice(unique(a), 5)) # [1, 2, 3, 4, 5]