<pre class="lang-py prettyprint-override"><code>total_files_set = set(total_files)
files_downloaded_set = set(files_downloaded)
files_not_dowloaded_set = total_files_set - files_downloaded_set
list_of_files_not_dowloaded = list(files_not_dowloaded_set)
</code></pre>
<p>或者如果你想排成一行:</p>
<pre><code>list_of_files_not_dowloaded = list(set(total_files) - set(files_downloaded))
</code></pre>
<p>要了解有关使用集合的所有操作的更多信息,可以检查它<a href="https://docs.python.org/3/library/stdtypes.html#set" rel="nofollow noreferrer">here</a></p>
<p><strong>编辑</strong>:<br/>
我尝试了两种方法,使用2个随机列表</p>
<ul>
<li>对于包含50000个元素的子集和包含100000个元素的超集</li>
</ul>
<pre class="lang-py prettyprint-override"><code>timeit.timeit('l = list(set(l1)-set(l2))',
setup='import random; l1 = random.sample(range(1000000), 100000); l2 = random.sample(range(1000000), 50000)',
number = 10)
</code></pre>
<p>输出:</p>
<blockquote>
<p>0.39393879500130424</p>
</blockquote>
<pre><code>timeit.timeit('l = [item for item in l1 if item not in l2]', \
setup='import random; l1 = random.sample(range(1000000), 10000); l2 = random.sample(range(1000000), 5000)', \
number = 1)
</code></pre>
<p>输出:</p>
<blockquote>
<p>98.58012624000003</p>
</blockquote>
<p>如果您碰巧已经拥有这两个集合,而不必从列表转换:</p>
<pre class="lang-py prettyprint-override"><code>timeit.timeit('l = list(s2-s1)',
setup='import random; s1 = set(random.sample(range(1000000), 100000)); s2 = set(random.sample(range(1000000), 50000))',
number = 10)
</code></pre>
<p>输出:</p>
<blockquote>
<p>0.06160322100004123</p>
</blockquote>