Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?
Примеры:
Input : geeksforgeeks Output : efgkos
Совет: пожалуйста, попробуйте сначала решить эту задачу самостоятельно в своей IDE, а уж потом читать решение.
У этой задачи есть готовое решение (см. Remove all duplicates from a given string).
from collections import OrderedDict
def removeDupWithoutOrder(str):
return "".join(set(str))
def removeDupWithOrder(str):
return "".join(OrderedDict.fromkeys(str))
if __name__ == "__main__":
str = "geeksforgeeks"
print("Without Order =" , removeDupWithoutOrder(str))
print("With Order = ", removeDupWithOrder(str))
Результат:
Without Order = egfkosr With Order = geksfor
Что делают OrderedDict и fromkeys()?
OrderedDict это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.
Обратите внимание на следующий отрывок кода:
from collections import OrderedDict
ordinary_dictionary = {}
ordinary_dictionary['a'] = 1
ordinary_dictionary['b'] = 2
ordinary_dictionary['c'] = 3
ordinary_dictionary['d'] = 4
ordinary_dictionary['e'] = 5
# Output = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
print(ordinary_dictionary)
ordered_dictionary = OrderedDict()
ordered_dictionary['a'] = 1
ordered_dictionary['b'] = 2
ordered_dictionary['c'] = 3
ordered_dictionary['d'] = 4
ordered_dictionary['e'] = 5
# Output = {'a':1,'b':2,'c':3,'d':4,'e':5}
print(ordered_dictionary)
fromkeys() создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys() — fromkeys(seq[, value]).
Параметры:
- seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
- value: Опционально; если задать, значение будет установлено в качестве value.

