Python dropwhile()和takewhile()过滤状态

  • Post category:Python
  1. dropwhile()

dropwhile()是Python标准库itertools模块中的一个函数,用于筛选一个可迭代对象中的元素,直到筛选条件不再成立。具体来说,该函数会从可迭代对象中筛选出满足给定条件的元素,以生成器的形式返回,一旦给定条件不成立,生成器将保留之后的所有元素,不再做筛选。

dropwhile()语法如下:

itertools.dropwhile(predicate, iterable)

其中,predicate是用于判断元素是否要被筛选的函数,必须为返回布尔值的函数。iterable则是要进行筛选的可迭代对象。

示例代码:

import itertools

data = [2, 4, 5, 6, 8, 10, 11, 13]
result = itertools.dropwhile(lambda x: x % 2 == 0, data)

print(list(result))

# 输出结果:[5, 6, 8, 10, 11, 13]

在上述示例中,我们使用dropwhile()函数来筛选列表data中的元素,判断条件为:元素不能被2整除。由于2和4都能被2整除,因此dropwhile()会从列表中删除这两个元素,并保留之后的所有元素。最终结果为[5, 6, 8, 10, 11, 13]

  1. takewhile()

takewhile()也是Python标准库itertools模块中的一个函数,它与dropwhile()函数类似,但是筛选的方式相反。takewhile()会从可迭代对象中提取尽可能多的元素,使得这些元素满足给定的筛选条件。一旦给定条件不成立,takewhile()将停止提取元素。

takewhile()语法如下:

itertools.takewhile(predicate, iterable)

其中,predicate同样是用于判断元素是否要被筛选的函数,必须为返回布尔值的函数。iterable则是要进行筛选的可迭代对象。

示例代码:

import itertools

data = [2, 4, 5, 6, 8, 10, 11, 13]
result = itertools.takewhile(lambda x: x % 2 == 0, data)

print(list(result))

# 输出结果:[2, 4]

在上述示例中,我们使用takewhile()函数来提取列表data中的元素,判断条件为:元素能够被2整除。由于在列表中,2和4都能被2整除,因此takewhile()会提取这两个元素。一旦遇到5,筛选条件不再成立,takewhile()停止工作,最终结果为[2, 4]