Я хочу сгруппировать список списков в списки списков в соответствии с несколькими критериями:
- Индекс от 0 до 2 каждого списка должен быть идентичным
- Индекс 3 каждого списка находится в пределах диапазона плюс-минус 5 для четвертого элемента.
Если оба условия верны, сгруппируйте списки в список списков. Если нет, не группируйте списки.
Мне удалось сгруппировать списки в список списков, только если первое условие верно с пониманием списка с использованием operator.itemgetter
.
Вот пример кода, соответствующего первому условию:
input_list = [[0, 0, 'increase', 3, 6, 3],
[0, 0, 'increase', 10, 6, -4],
[0, 0, 'increase', 11, 6, -5],
[0, 0, 'increase', 20, 6, -1],
[0, 1, 'increase', 3, 7, 4],
[0, 2, 'low', 6, 2, -4]]
from operator import itemgetter
groupby_list = [list(g) for _,g in groupby(input_list,itemgetter(0,1,2))]
При текущем коде первые четыре списка группируются вместе, хотя последний не должен быть сгруппирован с первыми тремя списками в качестве его индекса 3 (например, 20) находится вне диапазона плюс-минус 5 своего четвертого элемента (например, 6) (т.е. 6 not in [20-5 : 20+5 ]
).
Вот желаемый результат, удовлетворяющий как условию 1, так и 2:
desired_output = [[[0, 0, 'increase', 3, 6, 3],
[0, 0, 'increase', 10, 6, -4],
[0, 0, 'increase', 11, 6, -5]],
[[0, 0, 'increase', 20, 6, -1]],
[[0, 1, 'increase', 3, 7, 4]],
[[0, 2, 'low', 6, 2, -4]]]
Как включить второе условие в текущий код или альтернативным методом?