说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
itertools.takewhile() 是 Python 中 itertools 模块提供的一个函数,用于从可迭代对象中提取元素,直到指定的谓词函数返回 False 为止。itertools.takewhile() 根据指定的谓词函数来迭代处理可迭代对象的元素,一旦谓词函数返回 False,迭代就会停止,并返回到该点为止的所有元素。
语法 itertools.takewhile(predicate, iterable)
,它创建一个迭代器,只要 predicate(谓语,一个函数)为真就从可迭代对象中返回元素。
参数和返回值:
注意事项:
大致相当于:
def takewhile(predicate, iterable):
# takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
for x in iterable:
if predicate(x):
yield x
else:
break
例如:
import itertools
foo = itertools.takewhile(lambda x: x<5, range(10))
[*foo]
# [0, 1, 2, 3, 4]
此时与 filter 效果相同:
foo2 = filter(lambda x: x<5, range(10))
[*foo2]
# [0, 1, 2, 3, 4]
但不同的是,filter 扫描整个迭代器以查找与条件匹配的元素。itertools.takewhile
在发现不符合条件的元素时停止。如:
import itertools
my_list = [1, -2, 3, -4, 5, -6]
foo = itertools.takewhile(lambda x: x>0, my_list)
foo2 = filter(lambda x: x>0, my_list)
[*foo] # outputs [1]
[*foo2] # outputs [1, 3, 5]
import itertools
data = [1, 2, 3, 4, 5, 0, 6, 7]
# 使用 takewhile 取出元素直到遇到 0
result = itertools.takewhile(lambda x: x != 0, data)
print(list(result)) # 输出 [1, 2, 3, 4, 5]
import itertools
data = "abcdefg"
# 使用 takewhile 取出元素直到遇到 'd'
result = itertools.takewhile(lambda x: x != 'd', data)
print(''.join(result)) # 输出 "abc"
假设我们有一个包含正数和负数的列表,我们希望提取所有正数,直到遇到第一个负数。
示例数据:
data = [10, 20, 30, -10, 40, 50]
目标,提取所有正数,直到遇到第一个负数:
[10, 20, 30]
实现代码:
import itertools
data = [10, 20, 30, -10, 40, 50]
# 使用 itertools.takewhile 提取正数
result = itertools.takewhile(lambda x: x > 0, data)
print(list(result)) # 输出 [10, 20, 30]
解释:
itertools.takewhile()
提取正数:itertools.takewhile(lambda x: x > 0, data)
根据谓词函数 lambda x: x > 0
迭代处理列表 data 的元素,直到遇到第一个负数。输出结果:
[10, 20, 30]
这个实用案例展示了如何使用 itertools.takewhile() 根据条件从数据序列中提取元素,适用于数据处理和序列操作等场景。
更新时间:2024-07-04 08:07:30 标签:python itertools 迭代 takewhile