我创建了一个函数,随机生成字母“a”、“b”、“c”和“d”的列表。我想创建一个与第一个列表相同的新列表,但删除了与前一个字母/项目相同的任何字母/项目。我遇到的问题是指列表中的前一封信
例如,如果:
letterlist = ['a','a','a','b','b','a,',b']
那么输出应该是,
nondupelist = ['a','b','a','b']
问题是nodupeletterlist与letterlist相同,这意味着它不会删除与上一个相同的项,因为我得到的函数引用letterlist中的前一项是错误的。我尝试过使用index和enumerate,但显然我用错了,因为我没有得到正确的结果。下面是我目前的尝试
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)
编辑: 这就是我最后使用的。我使用这个解决方案仅仅是因为我了解它是如何工作的。下面的答案可能会提供更简洁的解决方案
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
您可以使用^{} :
按照评论中的要求,不使用
itertools
的解决方案:拟议“工作解决方案”的固定版本:
您还可以使用^{} 稍微简化随机生成器:
或使用^{} :
这是我想到的。使用
random.choices()
会比下面的更好,但想法相同不涉及itertools相关问题 更多 >
编程相关推荐