2011-12-08 31 views
8

Ai đó có thể đề xuất cách tạo mô hình để trích xuất danh sách đầu tiên các số liên tiếp từ dữ liệu này?Mẫu lặp lại

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}; 

Tôi đã thử các biến thể như sample //. {useable : _?NumberQ .., ___} -> {useable} không có kết quả.

useable = TakeWhile[sample, NumberQ] hoạt động tốt, nhưng tôi muốn biết cách thực hiện bằng cách sử dụng đối sánh mẫu.

Trả lời

7

Đang cố gắng để giữ gìn logic của bạn:

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

Nếu bạn muốn dãy số dài nhất:

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

Sửa

Để có được tất cả các chuỗi số:

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

hoặc

[email protected][sample //. {x___, useable : Longest[_?NumberQ ..], y___} :> 
               ([email protected]{useable}; {x}~Join~{y})] 
6

Một cách sẽ được

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

trả về {52.2624, 54.4003, 60.7418, 61.3801, 62.6397, 61.7992, 63.2282} từ mẫu của bạn.

+0

@ Simon, Cảm ơn bạn. Tôi lướt qua ngay Longest. –

7

Một lựa chọn khác sẽ được xem xét cho nhập cảnh không số đầu tiên:

sample /. {useable___, _?(!NumberQ[#]&), ___} :> {useable} 
+2

+1. Có thể sử dụng 'except [_? NumberQ]' thay cho '_? (! NumberQ [#] &)'. –