Найти длину последовательности чисел больше, чем х в списке - PullRequest
0 голосов
/ 15 февраля 2019

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

Последовательность может быть, например:

list = [4, 3, 4, 5, 2, 5, 6, 5, 5, 6, 7, 6 ]

В этом случае сценарий может быть:

x=6
[1, 3] # since there are only two sequences with values greater than 6 (the 6 alone, and the triplet 6,7,6]

Вопрос похож на: Python: определить длину последовательности равных элементов в списке , которая работает только для последовательностей равных чисел.

По этой причине мой «черновик» должен был начинаться с максимального номера списка (в предыдущем сценарии x = 7), а затем заменять максимальное число на меньшее и находить длину последовательностей (замените все 7 на 6 и запустите тот же алгоритм, чтобы найти последовательности длиной не менее 6).

Есть ли более чистый и питонный способ сделать это?Я еще не мог понять это

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Альтернативный метод с использованием groupby:

from itertools import groupby

data = [4, 3, 4, 5, 2, 5, 6, 5, 5, 6, 7, 6 ]
x = 6

out = [len(list(group)) for larger, group in groupby(elem >= x for elem in data) if larger]

Этот метод работает, группируя значения в соответствии с логическим сравнением elem >= x, а затем записывая длины групп в понимании списка.

0 голосов
/ 15 февраля 2019

Я бы сделал это так, чтобы сделать шаги более читабельными.Возможно, не самое элегантное решение, но требует только базового понимания списка и строковых функций.

list = [0 if el < 6 else el for el in list]
str = ''.join(str(el) for el in list)
sequences = [seq for seq in str.split('0') if seq is not '']
lengths = [len(seq) for seq in sequences]
0 голосов
/ 15 февраля 2019

Вы можете использовать itertools.groupby :

from itertools import groupby

data = [4, 3, 4, 5, 2, 5, 6, 5, 5, 6, 7, 6 ]
x = 6

out = [sum(1 for _ in group) for is_larger, group in groupby(data, lambda value: value>=x) if is_larger]
print(out)
#[1, 3]

groupby группирует значения в соответствии с условием value >= x, которое становится ключом is_larger.

Мы сохраняем только те группы, где is_larger равен True, и для них мы получаем их длину с sum(1 for _ in group).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...