将list / set comprehension仅用作" for"环?

时间:2016-07-25 02:17:48

标签: python python-2.7 list-comprehension set-comprehension

我在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条记录的快速大致相同。我更喜欢风格的代码的第一个版本。

代码的第一个版本是否正确使用了set comprehension?或者我应该始终坚持第二种方法吗?

编辑:根据建议改进格式。我大多只是从IDE复制并粘贴。抱歉,伙计们。

1 个答案:

答案 0 :(得分:1)

第一个代码段看起来完全没问题。如果有的话,我会将记录创建提取到一个功能,以便清晰和更容易重构。

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)}