Удаление всех дубликатов символов из заданной строки в Python

Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?

Примеры:

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.