Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?
Примеры:
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.