Q1 - Является ли следующее set()
a generator expression
или set comprehension
? (Или они одинаковы? Если да, то существуют list
и dict
понимания и соответствующие типы-отливки на генераторах?)
my_set = {x for x in range(10)}
Q2. Учитывает ли оценка двойные значения, а затем удаляет их, применяя set()
?
dup_set = {x for x in [0, 1, 2, 0, 1, 2]}
Выполняет ли понимание (по скорости) лучше, чем обычные циклы for
?
Обновление. Я попытался использовать timeit
для сравнения скорости. Я не уверен, что я просто (справедливо) об этом.
C:\>python -m timeit "s = set()" "for x in range(10):" "
s.add(x)"
100000 loops, best of 3: 2.3 usec per loop
C:\>python -m timeit "s = {x for x in range(10)}"
1000000 loops, best of 3: 1.68 usec per loop
Теперь, используя некоторые условные выражения
C:\>python -m timeit "s = set()" "for x in range(10):" "
if x%2: s.add(x)"
100000 loops, best of 3: 2.27 usec per loop
C:\>python -m timeit "s = {x for x in range(10) if x%2}"
1000000 loops, best of 3: 1.83 usec per loop
Итак, есть какая-то разница, из-за того, что функциональность жестко закодирована в c
?