Расчет минимума или максимума по индексу в списке списков - PullRequest
0 голосов
/ 28 июня 2018
list_of_elements = [1255, 1256, 1257, 1258, 1259]
print(components[1255],components[1256],components[1257],components[1258],components[1259])

Выходные данные печати:

[481, 498, 5142, 5157] [481, 497, 5192, 5199] [481, 498, 5219, 5238] [481, 484, 5239, 5242] [481, 487, 5269, 5271)]

Что я хочу сделать, так это взять наименьшее число из первого индекса (0), наибольшее из второго, наименьшее из третьего и наибольшее из четвертого, так что в итоге я получу в этом случае:

[481,498,5142,5271]

Итак, опять же, в основном, мне дадут список элементов (в данном случае это list_of_elements, может иметь от 0 до неизвестных значений), затем я должен ввести элементы этого списка в качестве ключей в словаре components и выполните шаги, описанные выше.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это решение использует троичное выражение и enumerate + zip в пределах понимания списка:

L = [[481, 498, 5142, 5157], [481, 497, 5192, 5199],
     [481, 498, 5219, 5238], [481, 484, 5239, 5242],
     [481, 487, 5269, 5271]]

res = [(min if not i%2 else max)(j) for i, j in enumerate(zip(*L))]

print(res)

[481, 498, 5142, 5271]
0 голосов
/ 28 июня 2018

Это один из способов структурирования вашей логики через диспетчерский словарь и пару списочных представлений:

list_of_elements = [1255, 1256, 1257, 1258, 1259]

# extract data via list comprehension
L = [components[i] for i in list_of_elements]

# defined explicitly for demonstration
L = [[481, 498, 5142, 5157], [481, 497, 5192, 5199],
     [481, 498, 5219, 5238], [481, 484, 5239, 5242],
     [481, 487, 5269, 5271]]

from operator import itemgetter

# define dispatcher dictionary
funcs = {0: min, 1: max}

# apply via list comprehension
res = [funcs[i%2](map(itemgetter(i), L)) for i in range(len(L[0]))]

print(res)

[481, 498, 5142, 5271]

Объяснение

  • i%2 возвращает 0 или 1 в зависимости от того, является ли ваш индекс четным или нечетным.
  • funcs[i%2] возвращает либо min, либо max, как определено в словаре funcs.
  • map(itemgetter(i), L) возвращает итератор для i-го элемента каждого списка в L.
  • Применение funcs[i%2] к этому итератору возвращает минимальное или максимальное значение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...