Я пытаюсь написать функцию, которая будет идентифицировать значения в списке списков, которые в 5 раз больше, чем значения с тем же индексом в другом списке (другими словами, внутри строки функция определяет наибольшее значение и определяетесли это значение в 5 раз больше, чем все остальные значения в строке).После этого я бы хотел, чтобы функция возвращала новый список списков, каждый из которых содержал индекс значений, для которых функция была истинной в большом списке.Для пояснения, например, в списке, подобном этому:
samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]]
Я бы хотел вывод, подобный этому:
filtered = [[], [0], [1,2]]
, потому что первый список в samples_avg не имеет значений, для которых онравно true
, второе значение true для индекса 0, а последнее значение true для индексов 1 и 2.
Для этого я написал:
samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]]
def check(samples_avg):
filtered = []
#Find largest Value in row
maxval = [max(x) for x in zip(*samples_avg)]
#Determine if it is 5x larger than all other values in the row
maxlist = [(r >= (m/5)) for row in samples_avg for r, m in zip(row, maxval)]
#find index in each list for which maxlist is true
filtered = [z for z, y in zip(samples_avg, maxlist) if y == True]
print (maxval)
print (maxlist)
print (filtered)
out:
maxval = [15000, 144, 45]
maxlist = [False, False, False, True, False, False, False, True, True]
filtered = []
Оба maxval
и maxlist
отлично работают при поиске истинных значений.Тем не менее, это последний шаг нахождения индексов, которые верны в каждом списке, сбивает меня с толку.То, что я написал для filtered
, возвращает пустой список.