2016-04-04 3 views
0

Скажем, у меня есть массив Xs, и нужно поместить их через фильтр, а затем преобразовать каждый элемент в результате в массив YsКак фильтровать по результатам постижения?

[for (x of Xs) if (condition(x)) transform(x)] 

Но у меня есть еще один фильтр, который зависит от результатов первый фильтр, например только возвращать элементы в фильтрованной матрице, которые находятся в пределах 2 стандартных отклонений.

Что мне делать?

+0

Я думаю, ваш вопрос не совсем ясен. Не могли бы вы объяснить разными словами? – RafaelC

+2

Вы имеете в виду '[transform (x) для x в Xs, если условие (x)]'? – TigerhawkT3

+5

Сначала попробуйте написать свой алгоритм с помощью традиционных циклов. Видение рабочего алгоритма может быть очень полезно при его рефакторинге (при необходимости). – TigerhawkT3

ответ

2

Из этого способа сделать это, чтобы вложить несколько понятий или выражений генератора. Вы можете сделать все это в одном сложном выражении, но может быть яснее, если вы разделите их.

Например, если вы хотите, чтобы преобразовать значение списка с transform функции, и хотят, чтобы отфильтровать некоторые из значений (на основе преобразованного результата, а не оригинальный вход), вы можете использовать:

result = [x for x in (transform(y) for y in some_iterable) if condition(x)] 

или

transform_gen = (transform(y) for y in some_iterable) 
filtered_list = [x for x in transform_gen if condition(x)] 

вы, конечно, можете добавить столько дополнительных слоев вложенности, как вам нужно.

Смежные вопросы