Python 用islice()选取子集

  • Post category:Python

islice() 是 Python 内置的一个迭代器切片函数,它可以从可迭代对象中切取一个子集。这个函数可以被用来访问列表、元组、字典、集合等等类型的数据,并实现下方三种不同的使用方式:

第一种方式

最基础的用法,需要传递一个起始索引和结束索引,如下所示:

from itertools import islice

lst = [1, 2, 3, 4, 5]

subset = list(islice(lst, 1, 3))

print(subset)  # Output: [2, 3]

上述程序指定了起始索引为 1,结束索引为 3,返回的子集为 [2, 3]。

第二种方式

第二种方式需要传递起始索引、结束索引和步长值(步长为正数,表示正向切片;步长为负数,表示反向切片),步长的默认值为1,如下所示:

from itertools import islice

lst = [1, 2, 3, 4, 5]

subset = list(islice(lst, 0, None, 2))

print(subset)  # Output: [1, 3, 5]

上述程序指定了起始索引为0,结束索引为None,步长为2,表示从第一个元素开始,每隔一位选取一个元素,直到列表的末尾,返回的子集为 [1, 3, 5]。

第三种方式

第三种方式将返回一个无限迭代器,需要传递起始索引和步长值,如下所示:

from itertools import islice, count

subset = islice(count(1, 3), 3)

for val in subset:
    print(val)

# Output: 1 4 7

上述程序指定了起始索引为1,步长为3,islice() 返回了一个迭代器,对这个迭代器进行迭代,会得到一个无限的元素序列 (1, 4, 7, 10, 13, …)。在这个示例中使用的 count() 函数是 Python 内置的迭代器生成函数之一,它用于生成从一个起始数开始按一定步长增加的一个无限序列。

总结一下,islice() 函数非常有用,它可以帮助我们很方便地从一个迭代器中获取指定的元素子集。