Я бы начал с чего-то такого:
result = []
for row in test_array:
partial_result = []
for i in range(3):
if row[i] == 1:
partial_result.append(classes[i])
result.append(partial_result)
print(result)
Результаты с:
[['c'], ['a', 'b'], ['a', 'b', 'c']]
В Python мы предпочитаем понимание списка, а не циклы, так что время улучшить:
print([[classes[i] for i, val in enumerate(row) if val] for row in test_array])
enumerate
- это встроенная функция, которая принимает итерируемый объект в качестве параметра и возвращает итерируемое из кортежей (индекса, элемента) для всех элементов в исходной итерируемой, поэтому enumerate(row)
вернет(0, [0, 0, 1]), (1, [1, 1, 0]) и (2, [1, 1, 1]).
for i, val in enumerate(row) if val
будет работать, потому что 1s
интерпретируется как True
в Python и 0s
как False
.
[[classes[i] for i, val in enumerate(row) if val] for row in test_array]
^ create a list of elements based on some original list ------->^
^ each element of that list will be a list itself.
^ elements of that inner lists will be objects from classes list
^ for each pair (i, element) from enumerate(row) take this ith
element, but just if val == 1 ^