5 Stimmen

Mathematica Pick stoppt eine Liste, sobald ich eine 3 erhalte

Hier ist, was ich habe...

Select[roll, # <= 3 &]

Die folgende Liste kann eine 3 oder zwei 3en enthalten. Ich möchte, dass sie bei der ersten Drei von links nach rechts aufhört.

Mathematiker, der versucht zu programmieren.

7voto

DavidC Punkte 3036

Hinweis : Ich habe mein ursprüngliches Posting entfernt, das im Wesentlichen wie das von belisarius war. Hier ist ein weiterer Versuch...

Wenn Sie sicher sind, dass die Zahl 3 ein Mitglied von roll dann sollte dies funktionieren:

TakeWhile[roll, # != 3 &]~Append~3

Dies ist gleichbedeutend mit:

Take[roll, LengthWhile[roll, # != 3 &] +1]

Wenn Sie diese Annahme nicht treffen können, testen Sie zunächst mit MemberQ

EDIT : Dank an TomD, der die +1 in der zweiten Lösung vorschlug, wodurch die Notwendigkeit entfällt, die Append .

6voto

Mr.Wizard Punkte 23929

Dies ist um eine Größenordnung schneller als TakeWhile auf eine Liste von Ganzzahlen.

list /. {x___, 3, ___} :> {x}

Um die Liste zu erhalten über 3, verwenden Sie einfach {x, 3} auf der rechten Seite.

1voto

Dr. belisarius Punkte 59702

Sie könnten etwas wie folgt versuchen:

f[list_, item_] := list[[1 ;; Position[list, item][[1, 1]]]]  

Verwendung:

f[{1, 2, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 3]
(*
->{1,2,3}
*)
f[{1, 2, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 5]
(*
->{1,2,3,4,1,4,3,4,3,5}
*)

Wenn Sie auch Werte größer als 3 filtern wollen, können Sie einfach Ihren Code verwenden, der meinen umschließt:

g[list_, item_] :=  Select[list[[1 ;; Position[list, item][[1, 1]]]], # <= 3 &]  

also:

g[{-1, 1, 2, 5, 7, 1, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 3]
(*
->{-1,1,2,1,3}
*)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X