python列表随机选择并删除_关于列表:显示随机选择(Python)
发布日期:2021-08-19 23:50:06 浏览次数:13 分类:技术文章

本文共 2509 字,大约阅读时间需要 8 分钟。

我有一个项目列表[],我想从中随机显示一个项目,但在最后X个请求中,显示的项目不能重复一次以上。

list1=第1项,第2项,第3项,第4项,第5项,第6项,第7项,第8项,第9项,第10项

显示随机选择从上面的列表中

list2=将最后显示的项目存储在list2中,该列表只应存储7项目,而不是更多

随机显示从列表中选择但使当然不存在于表2

这是正确的方法吗?不管怎样,我想知道如何限制一个列表只存储7个项目?

谢谢

重复:stackoverflow.com/questions/1058712/…。可能是家庭作业。

collections.deque是python中唯一自然支持绑定的序列类型(并且仅在python 2.6及更高版本中),如果使用python 2.6或更高版本:

# Setup

from collections import deque

from random import choice

used = deque(maxlen=7)

# Now your sampling bit

item = random.choice([x for x in list1 if x not in used])

used.append(item)

如果使用的是python 2.5或更低版本,则不能使用maxlen参数,需要再执行一个操作来切掉deque前面的部分:

while len(used) > 7:

used.popleft()

这并不是最有效的方法,但确实有效。如果您需要速度,并且您的对象是可散列的(最不可变的类型),请考虑使用字典作为"已用"列表。

另外,如果只需要执行一次,random.shuffle方法也可以工作。

很高兴知道德克,谢谢!:)

这就是你想要的吗?

list1 = range(10)

import random

random.shuffle(list1)

list2 = list1[:7]

for item in list2:

print item

print list1[7]

换句话说,看看random.shuffle()。如果要保持原始列表的完整性,可以复制它:list_copy = list1[:]。

object=random.shuffle(list1)返回none,它不能将值存储在对象中吗?

不,random.shuffle()在适当的位置修改了列表(这就是为什么要复制的原因)。你可以从random.choice()的列表中得到一个随机项。

您可以尝试使用生成器函数,并在需要新项目时调用.next()。

import random

def randomizer(l, x):

penalty_box = []

random.shuffle(l)

while True:

element = l.pop(0)

# for show

print penalty_box, l

yield element

penalty_box.append(element)

if len(penalty_box) > x:

# penalty time over for the first element in the box

# reinsert randomly into the list

element = penalty_box.pop(0)

i = random.randint(0, len(l))

l.insert(i, element)

用法示例:

>>> r = randomizer([1,2, 3, 4, 5, 6, 7, 8], 3)

>>> r.next()

[] [1, 5, 2, 6, 4, 8, 7]

3

>>> r.next()

[3] [5, 2, 6, 4, 8, 7]

1

>>> r.next()

[3, 1] [2, 6, 4, 8, 7]

5

>>> r.next()

[3, 1, 5] [6, 4, 8, 7]

2

>>> r.next()

[1, 5, 2] [4, 3, 8, 7]

6

>>> r.next()

[5, 2, 6] [4, 3, 8, 7]

1

>>> r.next()

[2, 6, 1] [5, 3, 8, 7]

4

>>> r.next()

[6, 1, 4] [3, 8, 2, 7]

5

我将使用set objects获取列表1中而不是列表2中的项目列表:

import random

list1 = set(["item1","item2","item3","item4","item5",

"item6","item7","item8","item9","item10"])

list2 = []

while True:  # Or something

selection = random.choice(tuple(list1.difference(set(list2))))

print(selection)

list2.append(selection)

if len(list2) > 7:

list2 = list2[-7:]

比如:

# Setup

import random

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list2 = []

# Loop for as long as you want to display items

while loopCondition:

index = random.randint(0, len(list1)-1)

item = list1.pop(index)

print item

list2.append(item)

if(len(list2) > 7):

list1.append(list2.pop(0))

无限循环只是为了演示?

当然。Nimbuz指定他有一些"请求"进入,所以我将其表示为一个无限循环。我会修改,以免有人把它放进去。:)

转载地址:https://blog.csdn.net/weixin_31363715/article/details/114959664 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java中的tiles_tiles框架简单教程
下一篇:java 获取service方法吗_Java service层获取HttpServletRequest工具类的方法

发表评论

最新留言

很好
[***.229.124.182]2024年12月19日 17时48分05秒