从Set python获取随机值

2024-06-25 23:10:26 发布

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

我想从一个集合中得到一个随机值。下面是我的代码,它不起作用。在

我得到了一个错误:

File "/usr/lib/python2.7/random.py", line 320, in sample raise ValueError("sample larger than population") ValueError: sample larger than population

我不知道这意味着什么。我想得到一个整数,这样我就可以把这个整数加到一个集合中。因此,我将N从一个集合中随机选择元素放入另一个集合中。在

def getRandomBook():
    bookset = getBookSet()
    random_number = random.sample(bookset,1)
    print random_number[0]
    return_number = random_number[0]
    return return_number


def getBookSet(sales_input=open("data/sales_3yr.csv", "r")):
    sales = csv.reader(sales_input)
    bookID = set()
    lineNumber = 0    
    for line in sales:
        id = line[6]
        if lineNumber<>0:
            bookID.add(eval(id))
        lineNumber=1
    return bookID

Tags: sampleinnumberreturndefline整数random
1条回答
网友
1楼 · 发布于 2024-06-25 23:10:26

这意味着您的集合是空的,并且集合是空的,因为您的getBookSet()函数将从之前已被读取的file对象中读取。在

您将打开文件作为函数定义的一部分,这意味着您只能读取一次。不要对每次调用函数时都要求值的表达式使用函数默认参数。见"Least Astonishment" and the Mutable Default Argument。在

请执行以下操作:

def getBookSet(sales_input="data/sales_3yr.csv"):
    sales = csv.reader(open(sales_input, 'rb'))
    bookID = set()
    lineNumber = 0    
    for line in sales:
        id = line[6]
        if lineNumber<>0:
            bookID.add(eval(id))
        lineNumber=1
    return bookID

现在,每次调用函数时,函数都会打开file对象,并再次从第一个字节开始读取。sales_input参数现在是一个不可变的字符串,用于在运行函数时而不是在定义函数时打开file对象。在

纠正一些其他问题:

^{pr2}$
  • next()调用将为我们拉入第一行(头),并且在sales上的任何进一步循环将从下一行继续。在
  • 不要使用<>;它已被弃用。您可以测试if lineNumberif lineNumber > 0或{}(按优先顺序)。在
  • int()float()可以的时候,不要使用eval()。在
  • {12>使用cd12>的代码块自动关闭}。在

相关问题 更多 >