擅长:python、mysql、java
<p>如果要保持原始列表中元素的顺序,请使用OrderedDict:</p>
<pre><code>from collections import OrderedDict
varList2 = list(OrderedDict.fromkeys(varList))
# -> ['this', 'is', 'a', 'test', 'for', 'stack', 'over', 'flow', 'overflow']
</code></pre>
<p>根据您的预期输出,结合<code>Counter</code>dict将是最好的方法,将<code>counts * ind</code>添加到列表中,下面为您提供一个<code>O(n)</code>解决方案,而不是您自己的二次方法:</p>
<pre><code>varList = [ 'this', 'is', 'a', 'test', 'for', 'stack', 'over', 'flow', 'this', 'is', 'a', 'test', 'for', 'stack', 'overflow']
from collections import OrderedDict, Counter
counts = Counter(varList)
od = OrderedDict.fromkeys(varList, 0)
res = []
for ind, k in enumerate(od, 1):
res.extend([ind] * counts[k])
print(res)
</code></pre>
<p>输出:</p>
<pre><code>[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 9]
</code></pre>
<p>如果只想打印输出,只需删除列表:</p>
<pre><code>for ind, k in enumerate(od, 1):
print(*[ind]*v,end=" ")
</code></pre>
<p>输出:</p>
<pre><code>1 1 2 2 3 3 4 4 5 5 6 7 8 8 9
</code></pre>