Использовать понимание списка / набора просто как цикл for?
Я создаю набор кортежей NUM_RECORDS в Python. Это мой код
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. Извините, ребята.
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)}