Повторная картина - PullRequest
       1

Повторная картина

8 голосов
/ 08 декабря 2011

Может кто-нибудь предложить, как будет построен шаблон для извлечения первого списка непрерывных чисел из этих данных?

sample = {52.2624, 54.4003, 60.7418, 61.3801, 62.6397, 61.7992,
   63.2282, "", "", "", "", "", "", "", "", "", "", 62.3921, 61.897,
   60.299, 59.053, 61.3778, 64.3724, 63.4251, 78.1912, 79.7451,
   80.4741, "", 81.324, 79.9114, 93.7509};

Я пробовал варианты типа sample //. {useable : _?NumberQ .., ___} -> {useable} безрезультатно.

useable = TakeWhile[sample, NumberQ] работает хорошо, но я хотел бы знать, как это сделать, используя сопоставление с образцом.

Ответы [ 3 ]

7 голосов
/ 08 декабря 2011

Пытается сохранить свою логику:

 sample /. {useable : Longest[_?NumberQ ..], ___} -> {useable}

Если вы хотите самую длинную числовую последовательность:

sample /. {___, useable : Longest[_?NumberQ ..], ___} -> {useable}

Редактировать

Чтобы получить все числовые последовательности:

Cases[SplitBy[sample, NumberQ], {_?NumberQ ..}]

или

Last@Reap[sample //. {x___, useable : Longest[_?NumberQ ..], y___} :> 
                                              (Sow@{useable}; {x}~Join~{y})]
7 голосов
/ 08 декабря 2011

Другой вариант - поиск первой нечисловой записи:

sample /. {useable___, _?(!NumberQ[#]&), ___} :> {useable}
6 голосов
/ 08 декабря 2011

Одним из способов будет

sample /. {Longest[useable___?NumberQ], ___} :> {useable}

, который возвращает {52.2624, 54.4003, 60.7418, 61.3801, 62.6397, 61.7992, 63.2282} из вашего образца.

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