<p>我创建了一个函数,随机生成字母“a”、“b”、“c”和“d”的列表。我想创建一个与第一个列表相同的新列表,但删除了与前一个字母/项目相同的任何字母/项目。我遇到的问题是指列表中的前一封信</p>
<p>例如,如果:</p>
<p><code>letterlist = ['a','a','a','b','b','a,',b']</code></p>
<p>那么输出应该是,</p>
<p><code>nondupelist = ['a','b','a','b']</code></p>
<p>问题是nodupeletterlist与letterlist相同,这意味着它不会删除与上一个相同的项,因为我得到的函数引用letterlist中的前一项是错误的。我尝试过使用index和enumerate,但显然我用错了,因为我没有得到正确的结果。下面是我目前的尝试</p>
<pre><code>import random
def rdmlist(letterlist, nodupeletterlist):
for item in range(20):
rng = random.random()
if rng < 0.25:
letterlist.append("a")
elif 0.25 <= rng and rng < 0.5:
letterlist.append("b")
elif 0.5 <= rng and rng < 0.75:
letterlist.append("c")
else:
letterlist.append("d")
for letter in letterlist:
if letter != letterlist[letterlist.index(letter)-1]:
nodupeletterlist.append(letter)
else:
pass
return
letterlist1 = []
nodupeletterlist1 = []
rdmlist(letterlist1, nodupeletterlist1)
</code></pre>
<p>编辑:
这就是我最后使用的。我使用这个解决方案仅仅是因为我了解它是如何工作的。下面的答案可能会提供更简洁的解决方案</p>
<pre><code> for index, letter in enumerate(letterlist, start=0):
if 0 == index:
nodupeletterlist.append(letter)
else:
pass
for index, letter in enumerate(letterlist[1:], start = 1):
if letter != letterlist[index-1]:
nodupeletterlist.append(letter)
else:
pass
</code></pre>