0

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

2 つのコード スニペットの時間を計測したところ、20000 レコードの速度とほぼ同じでした。スタイル的には、コードの最初のバージョンを好みます。

コードの最初のバージョンは集合内包表記の正しい使用法ですか? それとも、常に2番目の方法に固執する必要がありますか?

編集:提案されたようにフォーマットを改善しました。ほとんどの場合、IDE からコピーして貼り付けただけです。ごめんなさい、みんな。

4

1 に答える 1

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)}
于 2016-08-08T21:51:05.230 に答える