0

我实际上使用以下代码从集合中获取随机整数。但是这个集合很大,所以随机选择真的很慢。有没有更好的办法?

def getRandomBook():
    return int(random.sample(getBookSet(),1)[0])


def getBookSet(cleaned_sales_input = "data/cleaned_sales.csv"):
    with open(cleaned_sales_input, "rb") as sales_file:
        sales = csv.reader(sales_file)
        return {int(row[6]) for row in sales}
4

1 回答 1

3

文件只读取一次,将集合变成列表;该random.sample()实现已经将一个集合变成了元组,只是为了能够选择一个样本。避免这种开销,而是使用random.choice()

books = None

def getRandomBook():
    global books
    if books is None:
        books = list(getBookSet())
    return random.choice(books)

无需调用int(),因为您已经转换了读取的值。

这至少加快了在重复调用时选择随机值的速度getRandomBook()。如果您每次运行程序只需要调用一次,那么除了创建一个仅包含唯一账面值的更简单的文件外,没有其他办法。

于 2013-09-03T11:46:16.490 回答