Разделить список по правилу - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть список

values_list = [1013.0, 683.0, 336.0, 406.0, 636.0, 1065.0, 1160.0]

Также у меня есть значение

value = 660.6153846153846

Этот список основан на предположении, что есть 3 этапа. Первый этап должен быть выше, чем значение , второй - ниже, а третий снова выше.

Я хочу разделить этот список на три списка, сохранив порядок значений следующим образом:

values_list = [[1013.0, 683.0], [336.0, 406.0, 636.0], [1065.0, 1160.0]]

Ответы [ 2 ]

3 голосов
/ 09 апреля 2020

Попробуйте, используя groupby:


from itertools import groupby

values_list = [1013.0, 683.0, 336.0, 406.0, 636.0, 1065.0, 1160.0]
value = 660.6153846153846

result = list(list(b) for a,b in groupby(values_list, lambda x: x < value ))
print (result)

Результат:

[[1013.0, 683.0], [336.0, 406.0, 636.0], [1065.0, 1160.0]]
3 голосов
/ 09 апреля 2020

Попробуйте это:

splits = []
splt = []
s = 0
for v in values_list:
    if len(splt) > 0:
        if v > value and s != 1:
            splits.append(splt)
            splt = []
        elif v <= value and s != -1:
            splits.append(splt)
            splt = []
    splt.append(v)
    s = 2*(v > value) - 1
if len(splt) > 0:
    splits.append(splt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...