2016-07-25 3 views
0

Я создаю набор кортежей 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 записей. Я предпочитаю первую версию кода стилистически.

Является ли первая версия кода правильным использованием набора понятий? Или я должен всегда придерживаться второго метода?

EDIT: Улучшено форматирование, как предлагается. Я в основном просто копировал и вставлял из среды IDE. Извините, ребята.

+1

Первый выглядит лучше для меня, но я бы не сказал, что это особенно неряшливо. Может использоваться символ подчеркивания вместо переменной, называемой «nouse», это обычное соглашение. – James

+0

Что такое выбор? Создать случайную запись? Я думаю, было бы более понятно, если вы напишете функцию GenerateRandomRecord(). Я думаю, что я сделал бы это класс, а не кортеж, если вы захотите позже изменить внутреннюю структуру или получить доступ к содержательному имени, а не к [3]. –

+1

Лично я предпочитаю расширять нетривиальные понимания в циклы, чтобы легче отлаживать конкретные итерации. – Ben

ответ

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)} 
Смежные вопросы