Вернуть самый длинный список последовательных отрицательных чисел, используя itertools.groupby - PullRequest
0 голосов
/ 23 октября 2019

Учитывая серию:

series = [2, 6, 9, -1, 1, -3, -3, -3, 1,-4]

Как вы возвращаете список [-3, -3, -3], используя itertools.groupby?

Пытаясь:

from itertools import groupby
max((list(g) for k, g in groupby(series, key=lambda i: i < 0)), key=len)

возвращает:

[2, 6, 9]

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Вы можете сделать:

from itertools import groupby

series = [2, 6, 9, -1, 1, -3, -3, -3, 1, -4]
result = max((list(group) for key, group in groupby(series) if key < 0), key=len)

print(result)

Вывод

[-3, -3, -3]

Проблема с вашим кодом состоит в том, что вы используете неправильный ключ в groupby, key=lambda i: i < 0, просто отфильтруйте результаты, если ключ положительный.

1 голос
/ 23 октября 2019

Проверьте значение k для True или False.

from itertools import groupby
series = [2, 6, 9, -1, 1, -3, -3, -3, 1,-4]
x = max([list(g) for k, g in groupby(series, key=lambda i: i < 0) if k == True ], key=len)
print(x)
...