![Python数据整理](https://wfqqreader-1252317822.image.myqcloud.com/cover/51/32436051/b_32436051.jpg)
上QQ阅读APP看书,第一时间看更新
练习15:迭代器介绍
为了生成数字列表,我们可以采用不同的方法。
1.生成一个包含10000000个1的列表:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/024-2-i.jpg?sign=1739990377-AvUlD7jnjLc4wtG4Kpv39rvIp3U4Hyrv-0-767bde7c75799a601c2a62e23744df6c)
2.检查变量的大小:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/024-3-i.jpg?sign=1739990377-otWPgXsP00DavhnaLmEAPpR6XwwGsz4R-0-f19f6380c91f48c42948b8b3684e9f58)
它显示的值大约是81528056(以字节为单位),这需要很多内存!只有当列表推导式结束后,变量big_list_of_numbers的值才可使用。如果尝试过大的数字,它会溢出系统的可用内存。
3.使用迭代器降低内存利用率:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/024-4-i.jpg?sign=1739990377-dycyspFoPgSDvBvvbCV2E98W33oZHy95-0-28d710647aed1aa8dc5c8aea2b830bc2)
最后一行显示small_list_of_numbers的大小只有56字节。这是一个懒惰方法,因为它没有生成所有元素。它会在被要求时逐个地生成它们,从而节省我们的时间。实际上,如果省略times关键字参数,那么实际上可以生成无限多的1。
4.循环新生成的迭代器:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/025-i.jpg?sign=1739990377-nX8jQaeWHwBuV9J6lN9cWl25hoA3ELDm-0-f2b52e6e7e8abf60aa806a7eb116ee7b)
我们使用enumerate函数以便得到循环计数器及其值。这有助于我们在计数器达到一定数量时(例如10)跳出循环。
输出将是10个1的列表。
5.查找任何一个函数的定义,首先请键入函数名并以“?”结尾,然后按Shift+Enter键进入Jupyter notebook。运行以下代码了解如何使用itertools的permutations(排列)和combinations(组合):
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/025-2-i.jpg?sign=1739990377-xJIAmg2krcCH9bNPHGeoMbJoOk3yr33v-0-5c5d9cc9cdcd8e720c738e1d57368911)