<p>您可以使用列表理解和集合列表来筛选原始列表:</p>
<pre><code>t = [[1, 3, 4, 5, 6, 7],[9, 7, 4, 5, 2], [3, 4, 5]]
# filter sets - each index corresponds to one inner list of t - the numbers in the
# set should be put into TC - those that are not go into nonTC
getem = [{3,4,6},{9,7,2},{5}]
TC = [ [p for p in part if p in getem[i]] for i,part in enumerate(t)]
print(TC)
nonTC = [ [p for p in part if p not in getem[i]] for i,part in enumerate(t)]
print(nonTC)
</code></pre>
<p>输出:</p>
<pre><code>[[3, 4, 6], [9, 7, 2], [5]] # TC
[[1, 5, 7], [4, 5], [3, 4]] # nonTC
</code></pre>
<p>读数:</p>
<ul>
<li><a href="https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions" rel="nofollow noreferrer">list comprehensions</a></li>
<li><a href="https://docs.python.org/3/tutorial/datastructures.html#sets" rel="nofollow noreferrer">sets</a></li>
<li><a href="https://docs.python.org/3/library/functions.html#enumerate" rel="nofollow noreferrer">enumerate(iterable)</a></li>
</ul>
<p>和:<a href="https://stackoverflow.com/questions/20639180/explanation-of-how-nested-list-comprehension-works">Explanation of how nested list comprehension works?</a></p>
<hr/>
<p>其他方法的建议,<a href="https://stackoverflow.com/users/2750492/achampion">AChampion</a>的信条:</p>
<pre><code>TC_1 = [[p for p in part if p in g] for g, part in zip(getem, t)]
nonTC_1 = [[p for p in part if p not in g] for g, part in zip(getem, t)]
</code></pre>
<p>请参见<a href="https://docs.python.org/3/library/functions.html#zip" rel="nofollow noreferrer">zip()</a>——它本质上是将两个列表捆绑成一个元组的可数</p>
<pre><code>( (t[0],getem[0]), (t[1],getem[1]) (t[2],getem[2]))
</code></pre>
<hr/>
<p>多个事件的附加组件-没收列表组件和集合:</p>
<pre><code>t = [[1, 3, 4, 5, 6, 7, 3, 3, 3],[9, 7, 4, 5, 2], [3, 4, 5]]
# filter lists - each index corresponds to one inner list of t - the numbers in the list
# should be put into TC - those that are not go into nonTC - exactly with the amounts given
getem = [[3,3,4,6],[9,7,2],[5]]
from collections import Counter
TC = []
nonTC = []
for f, part in zip(getem,t):
TC.append([])
nonTC.append([])
c = Counter(f)
for num in part:
if c.get(num,0) > 0:
TC[-1].append(num)
c[num]-=1
else:
nonTC[-1].append(num)
print(TC) # [[3, 4, 6, 3], [9, 7, 2], [5]]
print(nonTC) # [[1, 5, 7, 3, 3], [4, 5], [3, 4]]
</code></pre>
<p>它只需要一个通过你的项目,而不是2(单独的列表comps),这使它可能更有效地从长远来看</p>