Как посчитать уникальные символы в строке в Python

Подсчет символов в строке – распространенная задачка для начинающих программистов. В этой статье мы разберем три способа посчитать уникальные символы в строке: путем помещения символов во множество, словарь или список.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Считаем уникальные символы при помощи множества

Чтобы подсчитать количество уникальных символов в строке, сперва используйте функцию set() для преобразования строки во множество уникальных символов. Затем при помощи функции len() определите количество элементов множества.

my_str = 'bobby'

result = len(set(my_str))
print(result)  # 3

Функция set() принимает итерируемый объект и возвращает новый объект класса 'set' (т.е. множество) с элементами исходного объекта. Множество – это неупорядоченная коллекция уникальных элементов, поэтому преобразование строки во множество удаляет все повторы символов.

my_str = 'bobby'

print(set(my_str)) 

# Вывод:
# {'y', 'b', 'o'}

Последний шаг – использование функции len() для получения общего количества элементов множества.

my_str = 'bobby'

result = len(set(my_str))
print(result)  

# Вывод:
# 3

Функция len() возвращает длину (количество элементов) объекта. Аргументом, который принимает функция, может быть последовательность (например, строка, кортеж или список) или коллекция (словарь, множество, замороженное множество).

Если вам нужно не посчитать уникальные символы в строке, а получить их, используйте вместо функции len() метод str.join().

my_str = 'bobby'

result = ''.join(set(my_str))
print(result)  

# Вывод:
# byo

Метод str.join() принимает в качестве аргумента итерируемый объект и возвращает строку, которая является конкатенацией строк в итерируемом объекте. Строка, к которой обращается метод, используется в качестве разделителя между элементами.

Примечание редакции: подробнее о методе join() можно почитать в статье “Метод join() и объединение строк в Python”.

Считаем уникальные символы в строке с помощью dict.fromkeys()

При таком подходе сперва нужно создать из строки словарь при помощи метода dict.fromkeys(). Затем, используя функцию len(), можно получить количество элементов словаря.

my_str = 'bobby'


result = len(dict.fromkeys(my_str))
print(result)  


# Вывод:
# 3

Метод dict.fromkeys принимает итерируемый объект и значение и создает словарь. Ключами этого словаря будут элементы итерируемого объекта. Все ключи будут иметь одно значение – то, которое было передано dict.fromkeys() в качестве аргумента. Если значение не передано, по умолчанию используется None.

my_str = 'bobby'

print(dict.fromkeys(my_str))

# Вывод:
# {'b': None, 'o': None, 'y': None}

Ключи словаря уникальны, поэтому все дублирующиеся символы удаляются.

Если вам нужно не посчитать уникальные символы в строке, а получить их, используйте вместо функции len() метод str.join() .

my_str = 'bobby'


result = ''.join(dict.fromkeys(my_str).keys())
print(result)  

# Вывод:
# boy

При помощи метода dict.keys() мы получили ключи словаря, а при помощи str.join() объединили их в строку.

Начиная с Python 3.7 словари сохраняют порядок вставки ключей.

Подсчет уникальных символов с помощью цикла for

Чтобы посчитать уникальные символы в строке при помощи цикла for, нужно проделать следующие шаги:

  1. Объявите новую переменную, которая будет хранить пустой список.
  2. Используйте цикл for для итерации по строке.
  3. Используйте метод list.append() для добавления всех уникальных символов в список.
  4. Используйте функцию len() для получения длины списка.
my_str = 'bobby'

unique_chars = []

for char in my_str:
    if char not in unique_chars:
        unique_chars.append(char)

print(len(unique_chars))  # 3
print(unique_chars)  # ['b', 'o', 'y']

Мы использовали цикл for для перебора символов строки. На каждой итерации мы используем оператор not in, чтобы проверить, нет ли символа в списке. Если такого символа в списке нет, мы добавляем его в конец списка при помощи метода list.append().

Примечание редакции: познакомиться с оператором not in можно в статье “Операторы in и not in в Python”.

my_list = ['bobby', 'hadz']

my_list.append('com')

print(my_list)  

# Вывод:
# ['bobby', 'hadz', 'com']

Последний шаг – использование функции len() для получения длины списка уникальных символов.

Перевод статьи Borislav Hadzhiev «Count the number of unique characters in a String in Python».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *