Pyrym
@Pyrym
Python 3 и PyQt5

Поиск в многомерном списке по нескольким условиям?

Есть список из четырёх строк и семи столбцов. Первый столбец содержит заголовки, поэтому я его убираю в ходе программы.
Задано два условия. С первым - всё понятно, а вот второе условие - это число, которое находится в интервале между числами из второй и третьей строками. Искать нужно в трёх строках.
Решение - ищем в четвёртой строке, в данном случае D[3][5] = '05'
D = [['Параметр', 'a', 'a', 'a', 'b', 'b', 'b'],
     ['От', '1', '11', '51', '1', '31', '45'],
     ['До', '10', '50', '99', '30', '44', '60'],
     ['00', '01', '02', '03', '04', '05', '06']]

usl_1 = 'b' # условие 1
usl_2 = 40 # условие 2

D1 = list(D[i][1:] for i in range(len(D))) # срезаем первый столбец

F = []
for i in range(len(D1)):
    if usl_1 == D1[0][i] and int(D2[1][i-1]) <= usl_2: # ??? 
        F.append(i)
print('F = ',F) 
print('искомое = ',D1[3][F[0]])
  • Вопрос задан
  • 560 просмотров
Решения вопроса 1
@fireSparrow
D = [['Параметр', 'a', 'a', 'a', 'b', 'b', 'b'],
     ['От', '1', '11', '51', '1', '31', '45'],
     ['До', '10', '50', '99', '30', '44', '60'],
     ['00', '01', '02', '03', '04', '05', '06']]

zipped_D = list(zip(*D))[1:]

fltr_1 = lambda lst: lst[0] == 'b'
fltr_2 = lambda lst: int(lst[1]) <= 40 <= int(lst[2])

result = [
          item[3]
          for item in zipped_D
          if fltr_1(item) and fltr_2(item)
          ]

print("Искомое:", *result)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы