Mathematica Pick остановить список, как только я получу 3 Вот что у меня есть... Select[roll, # <= 3 &] Теперь в следующем списке может быть один или три три. Я хочу, чтобы он остановился в первых трех слева направо. Математик пытается закодировать. Ответ 1 Примечание. Я удалил оригинальную публикацию, которая была в основном похожа на запись belisarius. Здесь другая попытка... Если вы уверены, что номер 3 является членом roll, тогда это должно работать: TakeWhile[roll, # != 3 &]~Append~3 Это эквивалентно: Take[roll, LengthWhile[roll, # != 3 &] +1] Если вы не можете сделать это предположение, сначала проверьте сначала MemberQ EDIT. Кредит отправляется TomD для предложения +1 во втором решении, что устраняет необходимость использования Append. Ответ 2 Это порядок на порядок быстрее, чем TakeWhile в списке целых чисел. list /. {x___, 3, ___} :> {x} Чтобы получить список через 3, просто используйте {x, 3} с правой стороны. Ответ 3 Вы можете попробовать что-то вроде: f[list_, item_] := list[[1 ;; Position[list, item][[1, 1]]]] Использование: 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} *) Если вы также хотите фильтровать значения, превышающие 3, вы можете просто использовать мой код для переноса: g[list_, item_] := Select[list[[1 ;; Position[list, item][[1, 1]]]], # <= 3 &] так: 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} *)
Ответ 1 Примечание. Я удалил оригинальную публикацию, которая была в основном похожа на запись belisarius. Здесь другая попытка... Если вы уверены, что номер 3 является членом roll, тогда это должно работать: TakeWhile[roll, # != 3 &]~Append~3 Это эквивалентно: Take[roll, LengthWhile[roll, # != 3 &] +1] Если вы не можете сделать это предположение, сначала проверьте сначала MemberQ EDIT. Кредит отправляется TomD для предложения +1 во втором решении, что устраняет необходимость использования Append.
Ответ 2 Это порядок на порядок быстрее, чем TakeWhile в списке целых чисел. list /. {x___, 3, ___} :> {x} Чтобы получить список через 3, просто используйте {x, 3} с правой стороны.
Ответ 3 Вы можете попробовать что-то вроде: f[list_, item_] := list[[1 ;; Position[list, item][[1, 1]]]] Использование: 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} *) Если вы также хотите фильтровать значения, превышающие 3, вы можете просто использовать мой код для переноса: g[list_, item_] := Select[list[[1 ;; Position[list, item][[1, 1]]]], # <= 3 &] так: 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} *)