Python dropwhile() 和 takewhile() 过滤状态使用方法
dropwhile()
和 takewhile()
是 Python itertools
模块中提供的两个非常有用的函数,它们用于迭代地过滤序列中的元素。
dropwhile() 函数
dropwhile(predicate, sequence)
函数返回一个迭代器,它会从序列 sequence
中跳过元素直到遇到第一个不满足条件的元素,在此之后,它会返回所有剩余元素。
下面是 dropwhile()
函数的一些示例:
from itertools import dropwhile
# 示例一:跳过列表开头的负数元素
nums = [-1, -2, 3, 4, -5, 6, 7]
result = dropwhile(lambda x: x < 0, nums)
print(list(result)) # 输出 [3, 4, -5, 6, 7]
# 示例二:跳过字符串中的空格和标点符号
import string
test_str = " Hello, world! "
result = dropwhile(lambda x: x in string.punctuation or x.isspace(), test_str)
print(''.join(result)) # 输出 "Hello, world! "
在示例一中,dropwhile()
函数跳过了列表开头的两个负数元素 -1
和 -2
,直到找到第一个非负数的元素 3
。然后它返回剩余的元素 [3, 4, -5, 6, 7]
。
在示例二中,dropwhile()
函数跳过了字符串开头的空格和标点符号,直到它找到第一个非空格和标点符号的字符 H
。然后它返回剩余的字符串 "Hello, world! "
。
takewhile() 函数
和 dropwhile()
函数相反,takewhile(predicate, sequence)
函数返回一个迭代器,它会返回序列 sequence
中满足条件的元素,直到遇到不满足条件的元素,然后停止迭代。
下面是 takewhile()
函数的一些示例:
from itertools import takewhile
# 示例一:取出列表开头的正数元素
nums = [1, 2, -3, 4, -5, 6, 7]
result = takewhile(lambda x: x > 0, nums)
print(list(result)) # 输出 [1, 2]
# 示例二:取出字符串开头的字母字符
test_str = " Hello, world! "
import string
result = takewhile(lambda x: x.isalpha(), test_str.strip())
print(''.join(result)) # 输出 "Hello"
在示例一中,takewhile()
函数取出了列表开头的两个正数元素 1
和 2
,直到找到第一个非正数的元素 -3
,然后它停止迭代并返回 [1, 2]
。
在示例二中,takewhile()
函数取出了字符串开头的字母字符,直到找到第一个非字母字符空格 ,然后它停止迭代并返回
"Hello"
。
总之,使用 dropwhile()
和 takewhile()
函数可以大大简化过滤迭代器和序列的代码。