Python 用islice()选取子集

Python 用islice()选取子集前面使用了切片符号从集合中选取子集,当时是将一个列表对象中的元素组对。例如对于下面这个简单的列表:

flat = ['2', '3', '5', '7', '11', '13', '17', '19',
 '23', '29', '31', '37', '41', '43', '47', '53',
 '59', '61', '67', '71',
...
 ]

可以通过列表切片创建数据对:

>>> list(zip(flat[0::2], flat[1::2]))
[(2, 3), (5, 7), (11, 13), ...]

借助islice()函数则无须实例化列表对象就能实现相同的功能,处理任意大小的可迭代对象,如下所示:

flat_iter_1 = iter(flat)
flat_iter_2 = iter(flat)
zip(
    islice(flat_iter_1, 0, None, 2),
    islice(flat_iter_2, 1, None, 2)
)

这里基于一维数据点列表创建了两个独立的迭代器,它们可能是遍历打开的文件或者数据库结果集的两个迭代器。两个迭代器必须彼此独立,以保证一个
islice()函数的变动不会影响另一个islice()函数。

islice()函数的两组输入参数与flat[0::2]flat[1::2]表达式类似。由于没有切片符号式的简写形式,必须指明起始参数和结束参数,步长值可以省略,而取默认值1。上面的代码返回由二元组组成的数据序列:

[(2, 3), (5, 7), (11, 13), (17, 19), (23, 29),
...
(7883, 7901), (7907, 7919)]

由于islice()函数返回迭代器,所以可用于处理巨大的数据集,例如从一个大型数据集中提取一个子集。除了使用filter()函数和compress()函数,还可以用islice(source, 0, None, c)从大型数据集中提取 \frac{1}{c} 个数据项。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程