擅长:python、mysql、java
<p>虽然<a href="https://stackoverflow.com/a/67199530/1431750">the ^{<cd1>} solution</a>很好,但正如@PierreD所说,它非常不透明</p>
<p>这里有一种更清晰的方法,可以在<code>ancestrals</code>列表上进行迭代,而不是就地修改它。用于每个项目的最后一个字母的序号存储在<code>last_letters</code>字典中。对于每个<code>item</code>,都会检查它并使用下一个字母。默认值为<code>a</code>(<code>`</code>backtick)之前的值,因此当向其添加1时,将获得“a”</p>
<pre class="lang-py prettyprint-override"><code>ancestrals = ['1','2','1','2','1']
last_letters = {}
uni_a = [] # will hold the result
default = ord('a') - 1 # char before 'a' is '`'
for item in ancestrals:
prev_ord = last_letters.get(item, default) # these two lines can be
next_letter = chr(prev_ord + 1) # combined into one
uni_a.append(item + next_letter)
last_letters[item] = prev_ord + 1
print(uni_a)
# ['1a', '2a', '1b', '2b', '1c']
</code></pre>