<blockquote>
<p>Why is the 'AND' statement acting like a 'OR'?</p>
</blockquote>
<p>见:<a href="https://en.wikipedia.org/wiki/De_Morgan%27s_laws" rel="nofollow noreferrer">DeMorgan's Laws</a></p>
<p><a href="https://wikimedia.org/api/rest_v1/media/math/render/svg/b5b5f9f8696e764f9cba78b0d5182f320ec0b876" rel="nofollow noreferrer"><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/b5b5f9f8696e764f9cba78b0d5182f320ec0b876" alt="DeMorgan's Law"/></a></p>
<blockquote>
<p>How can we make this code more pythonic and more efficient?</p>
</blockquote>
<p>更像Python:</p>
<p>一种选择是在单独的列表中使用<a href="https://docs.python.org/3/library/functions.html#all" rel="nofollow noreferrer">all</a>:</p>
<pre class="lang-py prettyprint-override"><code>companies = [['zmpEVqsbCUO1aXStxHkSVA', 'palms-car-wash'],
['5T0vKfIJWP1xTnxA7fJ17w', 'meat-and-bread'],
['C0d5kzUx6C19mLcxQyhxCA', 'alamo-drafthouse-cinema-'],
['ch1ercqwoNLpQLxpTb90KQ', 'boston-tea-stop']]
no_interest = ['museum', 'cinema', 'car']
out = [x for x in companies if all([ni not in x[1] for ni in no_interest])]
print(out)
</code></pre>
<p>或与<code>not</code>{a4}一起:</p>
<pre><code>out = [x for x in companies if not any([ni in x[1] for ni in no_interest])]
</code></pre>
<pre><code>[['5T0vKfIJWP1xTnxA7fJ17w', 'meat-and-bread'],
['ch1ercqwoNLpQLxpTb90KQ', 'boston-tea-stop']]
</code></pre>
<hr/>
<p>更有效率:</p>
<p>使用类似<a href="https://pandas.pydata.org/docs/index.html" rel="nofollow noreferrer">pandas</a>的库:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
companies = [['zmpEVqsbCUO1aXStxHkSVA', 'palms-car-wash'],
['5T0vKfIJWP1xTnxA7fJ17w', 'meat-and-bread'],
['C0d5kzUx6C19mLcxQyhxCA', 'alamo-drafthouse-cinema-'],
['ch1ercqwoNLpQLxpTb90KQ', 'boston-tea-stop']]
df = pd.DataFrame(data=companies, columns=['id', 'val'])
no_interest = ['museum', 'cinema', 'car']
out = df[~df['val'].str.contains('|'.join(no_interest))]
print(out)
</code></pre>
<p>输出为数据帧</p>
<pre><code> id val
1 5T0vKfIJWP1xTnxA7fJ17w meat-and-bread
3 ch1ercqwoNLpQLxpTb90KQ boston-tea-stop
</code></pre>
<p>输出为列表</p>
<pre><code>print(out.to_numpy().tolist())
</code></pre>
<pre><code>[['5T0vKfIJWP1xTnxA7fJ17w', 'meat-and-bread'],
['ch1ercqwoNLpQLxpTb90KQ', 'boston-tea-stop']]
</code></pre>