选择范围之间不在列表中的随机整数

时间:2018-05-05 09:38:34

标签: python random

我需要随机选择两个整数之间的整数,但该整数不能在列表中。 我就是这样做的:

bannedReturningCustomersIndex = []
index = next(iter(set(range(0, 999)) - set(bannedReturningCustomersIndex)))
#some code..
bannedReturningCustomersIndex.append(index)

问题是我不是随机选择整数,我从头开始逐一挑选它们......

2 个答案:

答案 0 :(得分:2)

转换为列表后使用random.choice

import random
bannedReturningCustomersIndex = []
valid_indexes = list(set(range(0, 999)) - set(bannedReturningCustomersIndex))
bannedReturningCustomersIndex.append(random.choice(valid_indexes))

答案 1 :(得分:0)

即使前面的答案是正确的,我也想提出以下approch,它更具可读性和灵活性,并将逻辑与主代码分开。

import random

def iterRandNonBannedCustomers(banned_idx, c_idx=range(0, 999)):
    c_idx = list(c_idx)
    random.shuffle(c_idx)
    return filter(lambda i: i not in banned_idx, c_idx)

该函数返回所有非禁止客户的迭代器。例如,使用它,如下所示:

for customer in iterRandNonBannedCustomers(bannedReturningCustomersIndex):
    # do stuff