我如何保证随机生成的数据在Python中是唯一的?

时间:2016-05-22 03:53:35

标签: python

import random

def generate_broadcast_nodes():
    node_locations = []

    locations = ["barracks","bathroom","bridge","cq","dininghall","dropship","fighterbay","logi","reactor","shiphangar"]

    for i in range(3):
         node_locations.append(locations.pop(random.randint(0,len(locations)-1)))
    return node_locations

如何保证此for循环中生成的每个位置都是唯一的,并且没有重复项?

2 个答案:

答案 0 :(得分:2)

由于locations.pop(random.randint(0,len(locations)-1))不仅会返回一个元素,而且会将其从node_locations中删除,因此您的函数已经确保node_locations中没有重复项,locations不包含任何内容。

生成随机样本的更好方法是使用random.sample()

import random

def generate_broadcast_nodes():
    locations = ["barracks", "bathroom", "bridge", "cq", "dininghall",
                 "dropship", "fighterbay", "logi", "reactor", "shiphangar"]

    return random.sample(locations, 3)

答案 1 :(得分:0)

您可以使用set,其定义是否包含元素。但是,只要原始位置列表不包含重复项,您的代码将始终具有唯一的位置。这是因为popping来自locations的元素返回元素(并且具有从列表中删除它的副作用)