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



我查了很多次,似乎集合是最好的选择,但我认为这是不允许的。所以,基本上,我做了一个空列表,它生成了一个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)

但我的清单的长度一直在变化。

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

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])

你可以像Sacur说的那样用while循环来做这件事,但这里有另一个奇特的选项,尽管你的作业可能不允许这样做。

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

最新更新