擅长:python、mysql、java
<p>这是一个使用单个<code>Counter</code>的版本,避免使用另一个<code>set</code>,就像在@RoadRunner的解决方案中一样,在传递时从<code>Counter</code>弹出键。如果有许多副本,这可能会比OrderedDict解决方案稍微慢一些,但会使用更少的内存:</p>
<pre><code>from collections import Counter
words = ["paper", "Plastic", "aluminum", "PAPer", "TIN", " paper", "glass", "tin", "PAPER", "Polypropylene Plastic"]
counter = Counter(w.lower() for w in words)
result = []
for word in words:
key = word.lower()
if key in counter:
count = counter[key]
if count == 1:
result.append(word)
else:
result.append('{} ({})'.format(word, count))
counter.pop(key)
</code></pre>
<p><strong>注意</strong>对于Python>;=3.3,应该使用<a href="https://docs.python.org/3/library/stdtypes.html#str.casefold" rel="nofollow noreferrer">^{<cd4>}</a>而不是<code>lower</code></p>