<p>有几件事你可能需要注意。首先,缩进在Python中很重要。我不知道代码的缩进是否如预期的那样,但是函数代码应该比函数定义缩进得更远。你知道吗</p>
<p>第二,我觉得你的问题有点难以理解。但是有几件事可以改进你的代码。你知道吗</p>
<p>在collections模块中,有(或应该有)一个名为defaultdict的类型。此类型类似于dict,只是它具有指定类型的默认值。因此,当您得到一个键时,defaultdict(int)的默认值为0,即使该键以前不存在。这允许计数器的实现,例如在不排序的情况下查找重复项。你知道吗</p>
<pre><code>from collections import defaultdict
counter = defaultdict(int)
for item in items:
counter[item] += 1
</code></pre>
<p>这让我想到另一点。Python for循环为每个结构实现一个for。你几乎不需要列举你的项目,然后才能访问它们。所以</p>
<pre><code>for i in range(0,len(inputs)):
</code></pre>
<p>你想用</p>
<pre><code>for input in inputs:
</code></pre>
<p>如果你真的需要列举你的输入</p>
<pre><code>for i,input in enumerate(inputs):
</code></pre>
<p>最后,您可以使用列表理解、dict理解或生成器表达式迭代和过滤iterable对象。它们非常强大。见<a href="https://stackoverflow.com/questions/1747817/python-create-a-dictionary-with-list-comprehension">Create a dictionary with list comprehension in Python</a></p>
<p>试试这个代码,玩一下。看看对你有用吗。你知道吗</p>
<pre><code>from collections import defaultdict
def extractDuplicateBoxList(self, inputs):
counts = defaultdict(int)
for input in inputs:
counts[input.getShortName()] += 1
dup_shns = set([k for k,v in counts.items() if v > 1])
dups = [i for i in inputs if input.getShortName() in dup_shns]
return dups
</code></pre>