David542:
ここで設定した理解の例です。
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}
ガブリエル帽子:
あなたは反復可能を持っている場合は、リストの内包表記を使用してリソースの無駄である[]
代わりに、直接集合理解の{}
。
あなたは以下のFUNC Aのバイトコードを見れば、あなたはPythonがリストを構築し、パラメータセットに()関数としてそれを渡していることがわかります。
Func BのPythonのバイトコードで直接設定を構築するために最適化されています。
私は分析を行うには、次のコードを使用しています。
from dis import dis
def a():
return set([x for x in range(1, 10)])
def b():
return {x for x in range(1, 10)}
print('Dis Func A\n')
print(dis(a))
print('Dis Func B\n')
print(dis(b))
DISのFunc A
5 0 LOAD_GLOBAL 0 (set)
2 LOAD_CONST 1 (<code object <listcomp> at 0x00000249F64B2EA0, file "c:\Projects\stack-overflow\asd.py", line 5>)
4 LOAD_CONST 2 ('a.<locals>.<listcomp>')
6 MAKE_FUNCTION 0
8 LOAD_GLOBAL 1 (range)
10 LOAD_CONST 3 (1)
12 LOAD_CONST 4 (10)
14 CALL_FUNCTION 2
16 GET_ITER
18 CALL_FUNCTION 1
20 CALL_FUNCTION 1
22 RETURN_VALUE
Disassembly of <code object <listcomp> at 0x00000249F64B2EA0, file "c:\Projects\stack-overflow\asd.py", line 5>:
5 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (x)
8 LOAD_FAST 1 (x)
10 LIST_APPEND 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE
DISのFunc B
9 0 LOAD_CONST 1 (<code object <setcomp> at 0x00000249F64CE030, file "c:\Projects\stack-overflow\asd.py", line 9>)
2 LOAD_CONST 2 ('b.<locals>.<setcomp>')
4 MAKE_FUNCTION 0
6 LOAD_GLOBAL 0 (range)
8 LOAD_CONST 3 (1)
10 LOAD_CONST 4 (10)
12 CALL_FUNCTION 2
14 GET_ITER
16 CALL_FUNCTION 1
18 RETURN_VALUE
Disassembly of <code object <setcomp> at 0x00000249F64CE030, file "c:\Projects\stack-overflow\asd.py", line 9>:
9 0 BUILD_SET 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (x)
8 LOAD_FAST 1 (x)
10 SET_ADD 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE