#python #python-3.x #list #dictionary #indexing
#python #python-3.x #Список #словарь #индексирование
Вопрос:
Учитывая следующий список чисел:
mylist = [1, 2, 3, 4, 4, 2, 8, 9, 10, 10, 2]
Цель состоит в том, чтобы получить числовое представление массива, когда все, что имеет значение, — это идентификация отдельных значений.
indexes = [0, 1, 2, 3, 3, 1, 4, 5, 6, 6, 1]
Я попытался решить это с помощью следующей функции:
def first_occurrences(L):
result = []
for i in range(len(L)):
if i not in result:
result.append(i)
else:
result.append(L.index(i))
return result
что дает мне неверный вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Я думал об использовании словаря, но я не знаю, как это должно быть сделано
Есть идеи?
Большое спасибо
Ответ №1:
Сначала вы можете создать словарь с парами элемент-индекс:
lookup = {k: v for v, k in enumerate(dict.fromkeys(mylist))}
# {1: 0, 2: 1, 3: 2, 4: 3, 8: 4, 9: 5, 10: 6}
А затем используйте этот словарь для поиска индексов:
[lookup[i] for i in mylist]
# [0, 1, 2, 3, 3, 1, 4, 5, 6, 6, 1]
Комментарии:
1. Удивительные. Большое спасибо
Ответ №2:
смотрите ниже
mylist = [1, 2, 3, 4, 4, 2, 8, 9, 10, 10, 2]
seen = dict()
for idx, x in enumerate(mylist):
if x not in seen:
seen[x] = idx
newList = [seen[x] for x in mylist]
print(newList)
вывод
[0, 1, 2, 3, 3, 1, 6, 7, 8, 8, 1]
Комментарии:
1. @alex108 Давайте посмотрим на первый индекс 10 — это 8. согласны ли мы с этим? В другом ответе и в вашем вопросе это 6. Не могли бы вы объяснить, почему?