擅长:python、mysql、java
<p>如果我理解正确的话,您只希望在元组与其他元组具有重叠范围时,保持具有最大范围的元组。可以使用集合比较运算符<code><</code>检查某个范围是否在另一个范围内。注意<code>set(a) < set(b)</code>实际上意味着<code>set(a)</code>是<code>set(b)</code>的子集,不等于<code>set(b)</code></p>
<p>以下是您的问题的单行代码:</p>
<pre><code>list_all = [(0, 3, 'textA'), (0, 5, 'textB'), (8, 11, 'textC')]
res = [t for t in list_all if not any(set((range(t[0], t[1]))) < set(r)
for r in [range(i, j) for (i, j, _) in list_all])]
print(res)
</code></pre>
<p>输出:</p>
<pre><code>[(0, 5, 'textB'), (8, 11, 'textC')]
</code></pre>
<p>其思想是首先获取所有范围,并仅选择范围集不小于任何其他元组范围集的元组</p>
<p>当然,你也可以这样写</p>
<pre><code>res = [t for t in list_all if all(set((range(t[0], t[1]))) > set(r)
for r in [range(i, j) for (i, j, _) in list_all])]
</code></pre>