数値の配列 (またはこの場合は pandas シリーズ) を指定すると、最長のウィグル部分配列が返されます。ウィグル配列は、数字が方向を交互に変えるもので、厳密に上下します。いえ
Input: [10, 22, 9, 33, 49, 50, 31, 60, 15]
Output: [49, 50, 31, 60, 15]
配列は順番に形成する必要があります。つまり、値をスキップして配列を形成することはできません。
私の単純なブルート フォース アプローチは以下にあります。これを機能させるのに苦労しています。任意のヒント?
def zigzag(arr):
result = pd.Series([])
for i in range(len(arr)-2):
if arr[i:i+3] != sorted(arr[i:i+3]) and arr[i:i+3] != sorted(arr[i:i+3], reverse = True): # no three points increase or decrease
result = result.append(pd.Series(arr[i:i+3], index = list(range(i, i+3))))
result = result.loc[~result.index.duplicated(keep='first')]
else:
result = pd.Series([])
return result