Вот пример понимания набора:
inp = [1,2,3,4,4,3,5]
s_comp = {element for element in inp}
# {1, 2, 3, 4, 5}
Знает ли python преобразование нижеприведенного в непосредственное понимание набора (пропуская начальный список?), Или это сначала делает список понимание и затем преобразование полученного списка в набор (другими словами, это просто пустая трата ресурсов, использующих эту нотацию для создания набора).
s_comp = set([element for element in inp])
# {1, 2, 3, 4, 5}
Обратите внимание, из cProfile
кажется, что сначала делает понимание списка для последнего. Хотя каждый из них имеет одинаковое количество шагов (я бы предположил, что первый должен иметь на один шаг меньше?).
>>> cProfile.run('{element for element in [1,2,3,4,4,3,5]}')
4 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 <string>:1(<setcomp>)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
>>> cProfile.run('set([element for element in [1,2,3,4,4,3,5]])')
4 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<listcomp>) # list not set
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}