Проблема: создать карту букв и индексов в строке.
Мой первый подход был петлю по строке, используя Диапазон (ЛЕН (S)) и проверяя, существует ли буква на карте перед его добавлением:
s = 'mozzarella' mapped_s = {} for i in range(len(s)): if s[i] in mapped_s: mapped_s[s[i]].append(i) else: mapped_s[s[i]] = [i] print(f' mapped: {mapped_s}')
Это работает:
{'m': [0], 'o': [1], 'z': [2, 3], 'a': [4, 9], 'r': [5], 'e': [6], 'l': [7, 8]}
Но есть еще питонический способ получить эту карту: использовать перечисление ()!
letters = 'mozzarella' mapped_s = collections.defaultdict(list) for index, letter in enumerate(letters): mapped_s[letter].append(index) print(f'mapped: {dict(mapped_s)}')
Перечислять это Python встроенный функция Это дает вам список кортежей индексов и элементов в неразмерном:
print(f'enum {list(enumerate('mozzarella'))}') enum [(0, 'm'), (1, 'o'), (2, 'z'), (3, 'z'), (4, 'a'), (5, 'r'), (6, 'e'), (7, 'l'), (8, 'l'), (9, 'a')]
Он может быть использован для цикла по поводу утечки, сохраняя отслеживание индекса и элемента, аналогично тому, что _range (Len (s)) _was делает в моем первом примере:
for i, element in enumerate('mozzarella'): print(f'{i}: {element}')
Он также удаляет необходимость проверить, существует ли письмо перед созданием карты этой буквы!
Вы можете прочитать больше о перечете В документах или эта супер хорошая статья Дэн Баденс Отказ
Пост Карта строки в Python с перечислением Первоначально был опубликован на flaviabastos.ca.
Оригинал: “https://dev.to/flaviabastos/map-a-string-in-python-with-enumerate-34kg”