@13_nastya_13

Как сделать функцию, которая работала бы с любыми списками?

Есть список с элементами(некоторые из них повторяются). Нужно создать другой список, с нумерациями этих слов. Как сделать функцию, которая работала бы с любыми списками?

Например для списка ['abc', 'apple', 'pen', 'abc', 'pen', 'pc'] список с номерами должен быть [0, 1, 2, 0, 2, 3]
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
adugin
@adugin Куратор тега Python
items = ['abc', 'apple', 'pen', 'abc', 'pen', 'pc']

Вариант #1:
cache = {}
[cache.setdefault(item, len(cache)) for item in items]

Вариант #2:
from functools import lru_cache
from itertools import count

@lru_cache(maxsize=None)
def enumerate_as_seen(_, counter=count()):
    return next(counter)

list(map(enumerate_as_seen, items))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@dmshar
Если следовать обшепринятой логике - номер строиться исходя из лексикографического порядка исходного массива, то все решается в одну строчку:

lt= ['abc', 'apple', 'pen', 'abc', 'pen', 'pc']
lt_num=[sorted(list(set(lt))).index(x) for x in lt]


Результат:
[0, 1, 3, 0, 3, 2]
Ответ написан
>>> l = ['abc', 'apple', 'pen', 'abc', 'pen', 'pc']
>>> index_els = {v: k for k, v in reversed(tuple(enumerate(l)))}
>>> result = [index_els[k] for k in l]
>>> result
[0, 1, 2, 0, 2, 5]
Ответ написан
@alikk_python
Кратко о себе
Используйте словарь.

Пример: lis = {'1':'abc', '2':'apple'}
Ответ написан
@dooMoob
Значит вам нужен промежуточный словарь, где ключом будет элемент из списка, а значением его индекс
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы