#python-3.x #list
Вопрос:
Вопрос новичка на Python:
У меня есть такой список:
list1 = [[1.0, 0.0, 0.0],[0.0, 0.0, 1.0],[0.0, 0.0, 1.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]
Я хочу преобразовать в другой список, подобный этому (целое число, содержащее индекс, в котором находится 1.0).:
list2 = [0,2,2,1,2]
Пытался сделать это:
d = {[1.0, 0.0, 0.0]:0,
[0.0, 1.0, 0.0]:1,
[0.0, 0.0, 1.0]:2}
list2 = map(d.get, list1)
Но безуспешно
Комментарии:
1. ключ диктатора не должен быть изменяемым.
2. Каково преобразование из списка 1 в список 2? Как [1.0, 0.0, 0.0] преобразуется в 0? Это исправлено/жестко закодировано? И почему вдруг появляется словарь
d
, когда вы спрашиваете о списке списков?3. list2-это индекс » 1.0 » для каждого из списков в списке. Словарь d-это просто метод, который я пытался использовать.
4. Гарантируется ли
1.0
, что в каждом списке есть не более 1? Вы можете просто просмотреть внешний список, затем для каждого внутреннего списка найти индекс 1.0 и добавить индекс в список 2.5. Только
[l.index(1) for l in list1]
если в каждом списке есть один 1.0.
Ответ №1:
Ключи python dict
s не могут быть изменяемыми, самый быстрый способ изменить существующий код-это просто ввести tuple
s в качестве ключей вместо этого:
list1 = [[1.0, 0.0, 0.0],[0.0, 0.0, 1.0],[0.0, 0.0, 1.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]
d = {(1.0, 0.0, 0.0):0,
(0.0, 1.0, 0.0):1,
(0.0, 0.0, 1.0):2}
list2 = list(map(lambda x: d.get(tuple(x)), list1))
Ответ №2:
Вот результат:
И вот код:
list1 = [[1.0, 0.0, 0.0],[0.0, 0.0, 1.0],[0.0, 0.0, 1.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]
value_you_want = 1.0
list2 = []
for temp1 in range(len(list1)):
list2.append(list1[temp1].index(value_you_want))
print(list2)
Ответ №3:
list1 = [[1.0, 0.0, 0.0],[0.0, 0.0, 1.0],[0.0, 0.0, 1.0]
,[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]
list2=[i.index(1.0) for i in list1 if 1.0 in i]
print(list2)