Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 在python中遍历列表或集合_Python 3.x - Fatal编程技术网

Python 3.x 在python中遍历列表或集合

Python 3.x 在python中遍历列表或集合,python-3.x,Python 3.x,我收到一条PR视图评论,建议我在for循环下使用set not list,有人知道为什么吗?因为我确信我的列表中没有重复的元素 ['nam1','name2']中的i的 #{'name1','name2'中i的注释: #无论名称1或名称2的顺序如何,在i上执行操作 在某些情况下,如果python能够将其检测为“常量”,则python会自行将集优化为冻结集s if a in {"a","b","c"}: pass {“a”、“b”、“c”}将被优化为比常规集更便宜的冻结集 Pyt

我收到一条PR视图评论,建议我在for循环下使用set not list,有人知道为什么吗?因为我确信我的列表中没有重复的元素

['nam1','name2']中的i的

#{'name1','name2'中i的注释:
#无论名称1或名称2的顺序如何,在i上执行操作

在某些情况下,如果python能够将其检测为“常量”,则python会自行将
优化为
冻结集
s

if a in  {"a","b","c"}: 
    pass
{“a”、“b”、“c”}
将被优化为比常规集更便宜的冻结集


Python的窥视孔优化器现在将{1,2,3}中的
x等模式识别为一组常量的成员资格测试。这个
optimizer将该集合重铸为冻结集,并存储预构建的
不变的

但这是条件,不是循环


列表、集合和冻结集合具有不同的时间和空间需求
set
s比纯列表有更多的开销,创建它们需要更多的时间,也需要更多的存储空间

若您确信源数据并没有重复项,并且不需要在
set
s显示的地方进行任何查找,那个么列表就可以了

如有疑问,测量:

import timeit

for size in (4,40,400,4000,40000,400000,):
    # using ints, so string-creation does not overrule container creation
    def create_list():       return list(range(size))
    def create_set():        return set (range(size)) 
    def create_frozen():     return frozenset (range(size)) 
    print(f"list      ({size:>6}): ", timeit.timeit(create_list,   number=100))
    print(f"set       ({size:>6}): ", timeit.timeit(create_set,    number=100))
    print(f"frozenset ({size:>6}): ", timeit.timeit(create_frozen, number=100))

list      (     4):  6.404200030374341e-05 
set       (     4):  8.520600022166036e-05
frozenset (     4):  6.208299964782782e-05   # win

list      (    40):  7.895299950178014e-05   # win
set       (    40):  0.00012057100047968561
frozenset (    40):  0.00011847200039483141

list      (   400):  0.0003935449994969531   # win
set       (   400):  0.0009299020002799807
frozenset (   400):  0.0009138610002992209

list      (  4000):  0.007811448000211385    # win
set       (  4000):  0.013984612000058405
frozenset (  4000):  0.01376037299996824

list      ( 40000):  0.10312434200022835     # win
set       ( 40000):  0.16045320600005653
frozenset ( 40000):  0.15907835799953318

list      (400000):  1.3602663640003811      # win
set       (400000):  2.2382532829997217
frozenset (400000):  2.238473141999748

你为什么不问问评论者呢?我想你可以把这个问题改成类似“python中的列表与集合”的形式,让它不那么基于观点,但是这个问题已经被问了好几次了