Вырезать и вставить из рецептов itertools
from itertools import ifilterfalse
def unique_everseen(iterable, key=None):
"List unique elements, preserving order. Remember all elements ever seen."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
seen = set()
seen_add = seen.add
if key is None:
for element in ifilterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
yield element
Я действительно хотел бы, чтобы они могли сделать модуль из этих рецептов в ближайшее время. Я бы очень хотел иметь возможность делать from itertools_recipes import unique_everseen
вместо использования вырезания и вставки каждый раз, когда мне что-то нужно.
Используйте вот так:
def unique_words(string, ignore_case=False):
key = None
if ignore_case:
key = str.lower
return " ".join(unique_everseen(string.split(), key=key))
string2 = unique_words(string1)