列表理解与生成器表达式的奇怪时间结果?我正在回答这个问题,我更喜欢这里的生成器表达并使用它,我认为它会更快,因为生成器不需要先创建整个列表:>>> lis=[['a','b','c'],['d','e','f']]>>> 'd' in (y for x in lis for y in x)TrueLevon在他的解决方案中使用了列表理解,>>> lis = [['a','b','c'],['d','e','f']]>>> 'd' in [j for i in mylist for j in i]True但是当我做这些LC的时间结果比生成器快时:~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f']]" "'d' in (y for x in lis for y in x)" 100000 loops, best of 3: 2.36 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f']]" "'d' in [y for x in lis for y in x]" 100000 loops, best of 3: 1.51 usec per loop然后我增加了列表的大小,并再次计时:lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]这次搜索'd'生成器比LC快,但是当我搜索中间元素(11)和最后一个元素然后LC再次击败生成器表达式时,我无法理解为什么?~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "'d' in (y for x in lis for y in x)" 100000 loops, best of 3: 2.96 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "'d' in [y for x in lis for y in x]" 100000 loops, best of 3: 7.4 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "11 in [y for x in lis for y in x]"100000 loops, best of 3: 5.61 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "11 in (y for x in lis for y in x)"100000 loops, best of 3: 9.76 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "18 in (y for x in lis for y in x)"100000 loops, best of 3: 8.94 usec per loop~$ python -m timeit -s "lis=[['a','b','c'],['d','e','f'],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]" "18 in [y for x in lis for y in x]"100000 loops, best of 3: 7.13 usec per loop
添加回答
举报
0/150
提交
取消