仅将 list/set 推导式用作 "for" 循环?

Use list/set comprehension merely as a "for" loop?

我正在 Python 中创建一组 NUM_RECORDS 个元组。这是我的代码。

record_key_list = {(choice(tuple(studentID_list)),
                   choice(tuple(courseID_list)),
                   randint(2012, 2016),
                   choice(semesters),
                   choice(grades)[0]) 
                   for no_use in range(NUM_RECORDS)}

另一种方法是像这样对问题进行编码。

record_key_list = set()
while len(record_key_list) < NUM_RECORDS:
    record_key_list.add((choice(tuple(studentID_list)),
                        choice(tuple(courseID_list)),
                        randint(2012, 2016),
                        choice(semesters),
                        choice(grades)[0]))

我对这两个代码片段进行了计时,它们与 20000 条记录的速度大致相同。我在风格上更喜欢代码的第一个版本。

第一个版本的代码是集合理解的正确用法吗?还是我应该一直坚持第二种方法?

编辑:按照建议改进格式。我大多只是从 IDE 复制粘贴。对不起,伙计们。

第一个代码片段看起来完全没问题。如果有的话,为了清晰和更容易重构,我会将记录创建提取到一个函数中。

def random_record():
    studentID = choice(studentID_list)
    courseID = choice(courseID_list)
    year = randint(2012, 2016)
    semester = choice(semesters)
    grade = choice(grades)[0]
    return (studentID, courseID, year, semester, grade)

# ...

record_key_list = {random_record() for _ in range(NUM_RECORDS)}