列表理解與生成器表達式的奇怪時間結果?我正在回答這個問題,我更喜歡這里的生成器表達并使用它,我認為它會更快,因為生成器不需要先創(chuàng)建整個列表:>>> 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
列表理解與生成器表達式的奇怪時間結果?
ibeautiful
2019-08-19 14:23:50