Преобразование списка списков в список целых чисел

#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)