![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=1739202927-gWIlfi0dv8Jo0rjytfCUrvaE0SS7bN9i-0-36dbb420f19bec283d8b618eff712de6)
2.检查变量的大小:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/024-3-i.jpg?sign=1739202927-DbtZFI2x0x5LtCKxRIoLZIPinIh6glGf-0-c7ba8c08d46762deb0d7e8305f23b1a7)
它显示的值大约是81528056(以字节为单位),这需要很多内存!只有当列表推导式结束后,变量big_list_of_numbers的值才可使用。如果尝试过大的数字,它会溢出系统的可用内存。
3.使用迭代器降低内存利用率:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/024-4-i.jpg?sign=1739202927-D9XdVRr2ft7PuderrnTCEV69Qxul6ykr-0-54fb68ee2f6a429b54adcbdf3e8b6ba6)
最后一行显示small_list_of_numbers的大小只有56字节。这是一个懒惰方法,因为它没有生成所有元素。它会在被要求时逐个地生成它们,从而节省我们的时间。实际上,如果省略times关键字参数,那么实际上可以生成无限多的1。
4.循环新生成的迭代器:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/025-i.jpg?sign=1739202927-Fms5HIfd8W8poPJ7fBdpvIsLIgxvTQiM-0-48db542a544000f5feec2a2c36f65228)
我们使用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=1739202927-gtUG1A8687ulEo3oV1cyWiiMF1L1tTht-0-cc3a40873f15b95d57cf726a0b741032)