随机生成器,用于在拾取后从列表中删除项目

2024-10-01 07:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份48项的清单。我想随机挑选其中的3个项目,然后从列表中删除这3个项目。之后,随机挑选3个新项目。我希望循环16次,直到所有项目都被删除

我试过一个for循环。但我不知道如何删除那些从列表中随机选择的特定项目。我对Python和编程都是新手。非常感谢您的帮助

list_ = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8

loop_ = np.arange(0, 16)

for i in loop:
    print(random.sample(list_, 3))

Tags: 项目loop列表for编程npgreenblue
3条回答

您可以使用^{}方法:

import numpy as np
import random

list = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8

loop = np.arange(1,16)

for i in loop:
    item = random.sample(list, 3)
    print(item)
    for i in item:
        list.remove(i)

请注意,将变量命名为已经给内置程序指定的名称,例如list,这被认为是一种不好的做法。最好将您的列表命名为其他名称,例如colors

import random

colors = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8

for i in range(0, len(colors), 3):
    item = random.sample(colors, 3)
    print(item)
    for i in item:
        colors.remove(i)

更新

正如@dawg很好地指出的那样,list.remove()方法总是从最靠近列表开头的列表中删除项目,去掉了随机性的概念

我意识到使用索引而不是值更准确,因此使用list.pop()而不是list.remove()

from random import randint

colors = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8

while colors:
    lst = [colors.pop(randint(0, len(colors) - 1)) for _ in range(3)]
    print(lst)

np.arange(1,16)的长度为15,但要循环16次。此外,避免在列表中存在重复项时使用list.remove,即使它可能不会在您的特定问题中造成问题。最后,如上所述,避免使用“list”作为名称,因为Python已经使用了它。 下面是我的建议,处理索引并使用list.pop(0)方法:

l = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8

for i in range(16):
    item = random.sample(range(len(l)), 3)
    for k in sorted(item, reverse=True):
        l.pop(k)

print(l)
#[]

您还可以使用list.pop(index)方法

import random as rd
import numpy as np
lst = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
loop = np.arange(1,16)
for i in loop:
    for k in range(0,3):
        item = lst.pop(rd.choice(range(0,len(lst))))
        print(item)

.pop(index)方法做两件事。它返回列表给定索引处的元素。然后从列表中删除该元素

在.pop()函数中,我们有以下内容:随机选择一个数字(即索引)该选择是一个介于0和列表长度(独占)之间的数字列表

相关问题 更多 >