<p>看看你的例子:</p>
<pre><code>frequencies = [20, 5, 6, 7, 12]
ranges = [[10,20], [5,15], [5,30]]
</code></pre>
<p>您试图解决的问题是确定<code>frequencies</code>列表中有多少项满足条件<code>10 <= f <= 15</code>,其中<code>f</code>是频率,<code>10</code>是范围的最大起始值,<code>15</code>是范围的最小结束值。您首先需要确定此条件检查的上限和下限。你知道吗</p>
<pre><code>lower_bound = None
upper_bound = None
for r in ranges:
if lower_bound is not None:
lower_bound = max(lower_bound, r[0])
else:
lower_bound = r[0]
if upper_bound is not None:
upper_bound = min(upper_bound, r[-1])
else:
upper_bound = r[-1]
</code></pre>
<p>现在您可以遍历<code>frequencies</code>列表并计算满足条件的频率。有一种特殊情况,下界可能大于上界,在这种情况下没有解,因此返回值应该是<code>0</code>。你知道吗</p>
<pre><code>count = 0
if (lower_bound < upper_bound):
for f in frequencies:
if lower_bound <= f <= upper_bound:
count += 1
</code></pre>
<p>这可能已经足够了,但是如果列表中有重复项,那么您将浪费时间检查它们-<a href="https://docs.python.org/3/library/collections.html#collections.Counter" rel="nofollow noreferrer">collections.Counter</a>将是一个很好的选项,用于涵盖此场景。你知道吗</p>
<pre><code>import collections
freq_counter = collections.Counter(frequencies)
count = 0
if (lower_bound < upper_bound):
for f in freq_counter.keys():
if lower_bound <= f <= upper_bound:
count += freq_counter[f]
</code></pre>
<p>现在剩下的就是返回<code>count</code>的值。你知道吗</p>
<pre><code>return count
</code></pre>