python 我有一个名单是根据另一个名单所创建的,但是,我不希望两个名字重复出现,我该怎么做呢?

abithluo  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(72)

Code
我在一个列表中有六个名字,我希望随机重复它们20次,并将其保存到一个名为“队列”的列表中。但是,我不希望这些名字彼此重复。例如,我不希望类似['Shadab','Shadab'..]这样的名字彼此相邻。
我该怎么去弥补呢?
我试着把保龄球手列表中的名字添加到一个名为“阵容”的新列表中,然后使用索引来替换重复的名字,但是,我无法成功地做到这一点。

qxsslcnc

qxsslcnc1#

这可以是您的问题的答案代码。

import random
### number of overs
overs = 20
bowlers = ['Wasim','Hasan','Fazal','Rumman','Abrar','Shadab']
lineup = []

for i in range(overs):
    lineup.append(random.choice(bowlers))
    if (i != 0) & (lineup[i-1]==lineup[i]):
        lineup.pop()
        bowlers_notprev = bowlers.copy()
        bowlers_notprev.remove(lineup[i-1])
        lineup.append(random.choice(bowlers_notprev))

在这种情况下,不应该使用双for循环,如果你的代码的第一个for循环是为了向lineup列表中添加一个人,第二个for循环是为了检查它是否与前一个相同,你也可以编写下面的代码。

for i in range(overs):
    z = random.choice(bowlers)
    lineup.append(z)

for x in range(overs-1):
    if lineup[x] == lineup[x+1]:
        rmv = lineup.pop(x)
        bowlers_notprev = bowlers.copy()
        bowlers_notprev.remove(rmv)
        lineup.insert(x, random.choice(bowlers_notprev))

当从bolwers中采样lineup时,可以使用列表解析,如下所示。

lineup = [random.choice(bowlers) for a in range(overs)]

相关问题