如何在不更改列表长度的情况下删除列表中出现多次的元素(无集合)

时间:2018-11-03 16:06:49

标签: python python-3.x list

我已经查询了很多次,似乎设置是最好的选择,但是对于此作业,我认为这是不允许的。因此,基本上,我做了一个空列表,它生成了一个长度为5个元素且内部数字在1到9之间的列表。但是所有数字都必须在列表中出现一次。我怎么做?

    import random
    lis = []
    for i in range(1,6):
        x = random.randint(1,9)
        lis.append(x)

我尝试过,

    if x not in lis:
    lis.append(x)

但是我的名单长度不断变化。

2 个答案:

答案 0 :(得分:2)

IIUC,您可以在最初尝试的while语句旁边使用if

import random
lis = []
while len(lis) < 5:
    x = random.randint(1,9)
    if x not in lis:
        lis.append(x)

>>> lis
[2, 8, 1, 5, 3]

但是,如果您想棘手,可以这样做:

x = list(range(1,10))
random.shuffle(x)
>>> x[:5]
[2, 1, 4, 3, 7]

import numpy as np

>>> np.random.choice(range(1,10),5,replace=False)
array([7, 5, 3, 6, 4])

答案 1 :(得分:2)

您可以像Sacul在while循环中所说的那样执行此操作,但这是另一个不错的选择,但是您的作业可能不允许这样做。

import random
lis = random.sample(range(1,10),5)