Mam tablicę numpy taką jak ta [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1]
Chciałbym znaleźć długość najdłuższej z następujących po sobie serii 1s lub -1s. Na przykład, powinno być 3znajdź długość najdłuższej z następujących po sobie serii liczb
Odpowiedz
w czystym Pythonie
>>> from itertools import groupby
>>> L = [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1]
>>> max(sum(1 for i in g) for k,g in groupby(L))
3
Nie można uzyskać prostsze niż to. +1 –
Dobre wykorzystanie narzędzi itertools! – jszakmeister
@jszakmeister, za każdym razem, gdy problem zawiera słowo "consecutive", 'groupby()' powinno być pierwszą rzeczą, którą masz na myśli. –
podobne do odpowiedzi przez @AlexMartelli
>>> import numpy as np
>>> nums = np.array([1,1,1,-1-1,1,-1,1,1,-1,-1,-1,1,-1])
>>> run_ends = np.where(np.diff(nums))[0] + 1
>>> np.diff(np.hstack((0, run_ends, nums.size))).max()
3
Czy chcesz 'rozwiązanie numpy' lub roztwór czystego-python jest w porządku ? To banalne użycie 'itertools.groupby' ... – Bakuriu
Więc wynik w tym przypadku powinien wynosić 2 (-1-1) w prawo? ... ord jest tam tylko", "brakujące i faktycznie chcesz 3 (1,1 , 1)? – pypat
@Bururiu wszystkie rozwiązania z czystym pythonem są małymi rozwiązaniami. Jedyna zmiana polega na tym, że czasami rozwiązania specyficzne dla numpy są znacznie ładniejsze lub znacznie szybsze. –