<div dir="ltr"><div>Hi,</div><div><br></div><div>You should have a look to the blog post from Nyall: <a href="http://nyalldawson.net/2016/10/speeding-up-your-pyqgis-scripts/">http://nyalldawson.net/2016/10/speeding-up-your-pyqgis-scripts/</a></div><div>So you can still use your `<span style="font-size:12.800000190734863px">setFilterExpression`</span></div><div><br><div><table border="0" cellpadding="0" cellspacing="0" style="width:673.625px;font-size:13px;color:rgb(85,85,85);margin:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;direction:ltr;table-layout:auto"><tbody style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr"><tr style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr"><td class="gmail-gutter" style="padding:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;outline:0px;overflow:visible;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;color:rgb(175,175,175)"><div class="gmail-line gmail-number1 gmail-index0 gmail-alt2" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 0.5em 0px 1em;text-align:right;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre">1</div><div class="gmail-line gmail-number2 gmail-index1 gmail-alt1" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 0.5em 0px 1em;text-align:right;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre">2</div><div class="gmail-line gmail-number3 gmail-index2 gmail-alt2" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 0.5em 0px 1em;text-align:right;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre">3</div></td><td class="gmail-code" style="width:643.3125px;padding:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;outline:0px;overflow:visible;vertical-align:baseline;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr"><div class="gmail-container" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr"><div class="gmail-line gmail-number1 gmail-index0 gmail-alt2" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 1em;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre"><code class="gmail-python gmail-plain" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:black">request </code><code class="gmail-python gmail-keyword" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-weight:bold;font-size:1em;direction:ltr;display:inline;color:rgb(0,102,153)">=</code> <code class="gmail-python gmail-plain" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:black">QgsFeatureRequest().setFilterFids(vector_layer.selectedFeaturesIds())</code></div><div class="gmail-line gmail-number2 gmail-index1 gmail-alt1" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 1em;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre"><code class="gmail-python gmail-keyword" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-weight:bold;font-size:1em;direction:ltr;display:inline;color:rgb(0,102,153)">for</code> <code class="gmail-python gmail-plain" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:black">feature </code><code class="gmail-python gmail-keyword" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-weight:bold;font-size:1em;direction:ltr;display:inline;color:rgb(0,102,153)">in</code> <code class="gmail-python gmail-plain" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:black">vector_layer.getFeatures(request):</code></div><div class="gmail-line gmail-number3 gmail-index2 gmail-alt2" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 1em;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre"><code class="gmail-python gmail-spaces" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline">    </code><code class="gmail-python gmail-comments" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:rgb(0,130,0)"># do something with the feature</code></div><div class="gmail-line gmail-number3 gmail-index2 gmail-alt2" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px 1em;vertical-align:baseline;width:auto;box-sizing:content-box;font-size:1em;direction:ltr;white-space:pre"><code class="gmail-python gmail-comments" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;background-image:none;border:0px;float:none;height:auto;line-height:1.1em;margin:0px;outline:0px;overflow:visible;padding:0px;vertical-align:baseline;width:auto;box-sizing:content-box;font-family:Monaco,Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace;font-size:1em;direction:ltr;display:inline;color:rgb(0,130,0)"><br></code></div></div></td></tr></tbody></table></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-12-19 16:41 GMT+01:00 Matthias Kuhn <span dir="ltr"><<a href="mailto:matthias@opengis.ch" target="_blank">matthias@opengis.ch</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Matteo,<br>
<br>
No, it's not possible to combine the two in the query itself.<br>
<br>
But sending the request with the filter expression and then checking if<br>
each feature's id is in selectedFeatureIds() should be straightforward.<br>
<br>
selcted_ids = layer.selectedFeatureIds()<br>
for feature in layer.getFeatures(request):<br>
    if <a href="http://feature.id" rel="noreferrer" target="_blank">feature.id</a>() in selected_ids:<br>
        do_amazing_stuff_with(feature)<br>
<span class="HOEnZb"><font color="#888888"><br>
Matthias<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 12/19/2017 04:33 PM, matteo wrote:<br>
> Hi devs,<br>
><br>
> maybe the question can sound trivial but I didn't find a solution.<br>
><br>
> Simply I would like to iterate only on selected features of a vector<br>
> layer features with an expression.<br>
><br>
> I know that the QgsFeatureRequest can be used with `setFilterExpression`<br>
> and `setFilterFids`.<br>
><br>
> Is it possible to combine them, so merging the following example in an<br>
> unique request?<br>
><br>
> exp = ''' "PH" > 7 '''<br>
> request = QgsFeatureRequest().<wbr>setFilterExpression(exp)<br>
> l = [<a href="http://i.id" rel="noreferrer" target="_blank">i.id</a>() for i in vl.selectedFeatures()]<br>
> request = QgsFeatureRequest().<wbr>setFilterFids(l)<br>
><br>
> for i in vl.getFeatures(request):<br>
>     ......<br>
><br>
><br>
> Thanks for all the suggestions!<br>
><br>
> Cheers<br>
><br>
> Matteo<br>
> ______________________________<wbr>_________________<br>
> QGIS-Developer mailing list<br>
> <a href="mailto:QGIS-Developer@lists.osgeo.org">QGIS-Developer@lists.osgeo.org</a><br>
> List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" rel="noreferrer" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/qgis-<wbr>developer</a><br>
> Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" rel="noreferrer" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/qgis-<wbr>developer</a><br>
><br>
______________________________<wbr>_________________<br>
QGIS-Developer mailing list<br>
<a href="mailto:QGIS-Developer@lists.osgeo.org">QGIS-Developer@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" rel="noreferrer" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/qgis-<wbr>developer</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" rel="noreferrer" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/qgis-<wbr>developer</a></div></div></blockquote></div><br></div>