Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 初始化集合_Python_Python 3.x_Set - Fatal编程技术网

Python 初始化集合

Python 初始化集合,python,python-3.x,set,Python,Python 3.x,Set,下面是一个集合理解的示例: inp = [1,2,3,4,4,3,5] s_comp = {element for element in inp} # {1, 2, 3, 4, 5} python是否知道将下面的内容转换为立即的集合理解(跳过初始列表?),还是先进行列表理解,然后将结果列表转换为集合(换句话说,使用此符号创建集合只是浪费资源) 注意,从cProfile中,它似乎首先对后者进行列表理解。虽然它们每个都有相同的步数(我想第一个应该少一步?) >>cProfile.run(“{

下面是一个集合理解的示例:

inp    = [1,2,3,4,4,3,5]
s_comp = {element for element in inp}
# {1, 2, 3, 4, 5}
python是否知道将下面的内容转换为立即的集合理解(跳过初始列表?),还是先进行列表理解,然后将结果列表转换为集合(换句话说,使用此符号创建集合只是浪费资源)

注意,从
cProfile
中,它似乎首先对后者进行列表理解。虽然它们每个都有相同的步数(我想第一个应该少一步?)

>>cProfile.run(“{element for element in[1,2,3,4,4,3,5]}”)
在0.000秒内调用4个函数
订购人:标准名称
ncalls tottime percall cumtime percall文件名:lineno(函数)
1    0.000    0.000    0.000    0.000 :1()
1    0.000    0.000    0.000    0.000 :1()
1 0.000 0.000 0.000 0.000{内置方法builtins.exec}
>>>cProfile.run('set([1,2,3,4,4,3,5]]中元素的[element for element]))
在0.000秒内调用4个函数
订购人:标准名称
ncalls tottime percall cumtime percall文件名:lineno(函数)
1 0.000 0.000 0.000 0.000:1()#未设置列表
1    0.000    0.000    0.000    0.000 :1()
1 0.000 0.000 0.000 0.000{内置方法builtins.exec}

如果您有一个iterable,那么使用列表理解
[]
而不是直接使用集合理解
{}
是对资源的浪费

如果查看下面func A的字节码,您将看到Python正在构建一个列表,并将其作为参数传递给set()函数

在Func B的字节码中,Python被优化为直接构建一个集合

我使用了下面的代码来进行分析

从dis导入dis
定义a():
返回集([x代表范围(1,10)中的x)])
def b():
返回{x代表范围(1,10)内的x}
打印('Dis Func A\n')
印刷(dis(a))
打印('Dis Func B\n')
印刷(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
5 0加载\u全局0(设置)
2加载常数1()
4荷载常数2('a…)
6生成函数0
8负载_全局1(范围)
10荷载常数3(1)
12负载常数4(10)
14调用函数2
16获取ITER
18调用函数1
20调用函数1
22返回值
反汇编:
5 0生成列表0
2加载速度为0(.0)
>>国际热核实验堆8(至14)4
6商店快速1(x)
8快速加载1(x)
10清单2
12跳/绝对4
>>14返回值
显示功能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
9 0 LOAD_CONST 1(行)
2荷载常数2('b…)
4生成函数0
6加载_全局0(范围)
8负载常数3(1)
10荷载常数4(10)
12调用函数2
14获取ITER
16调用函数1
18返回值
反汇编:
9 0生成集0
2加载速度为0(.0)
>>国际热核实验堆8(至14)4
6商店快速1(x)
8快速加载1(x)
10套加2套
12跳/绝对4
>>14返回值

它不能,因为名称
set
可能已绑定到其他内容。它首先进行列表理解,然后在列表上使用
set()
来消除重复项。但是看起来你只需要做
{1,2,3,4,4,3,5}
就可以节省一个步骤,你可以使用
timeit
查看情况,以及更短的时间
{}
和列表comp+set
  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
  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