python - 查找与条件匹配的行中的最后一个元素
问题描述
除了这个问题“ Get the first item from an iterable that match a condition ”之外,我还需要第一个匹配之前的元素。或完全等价:一行中与条件匹配的最后一个元素。例如,如果我需要此列表中第一个非素数之前的最后一个素数[2, 3, 4, 5, 6, 7, 8, 9]
,则答案为 3。如果没有这样的元素,结果可能是无、异常或默认值。
直接的解决方案是:
result = None
for x in numbers:
if is_prime(x):
result = x
else:
break
是否有一个简单的单线可以解决任务?
解决方案
不确定是否有更简单的方法。我的方法需要itertools.takewhile
.
- 用于
itertools.takewhile
在不再满足条件后停止迭代以创建素数列表,直到出现第一个非素数,即[2, 3]
- 然后用于
list[-1]
获取列表的最后一个元素。 - 如果列表为空,请使用
(list or [None])[-1]
使其返回None
import itertools
result = ([x for x in itertools.takewhile(lambda n: is_prime(n), numbers)] or [None])[-1]
from collections import deque
result = (deque((itertools.takewhile(lambda n: is_prime(n), numbers)), maxlen=1) or [None]).pop()
推荐阅读
- javascript - 使用 jsPDF 和 Html2Canvas 将图像添加到 pdf
- javascript - 如何使用反应钩子清理 useEffect 中的 setInterval
- c++ - 如何使用由指向视频数据的指针创建的 cv::Mat imgbuf
- reactjs - 如何在 Input 标签中为 Bootstrap 滑块定义格式化程序函数?
- python - 批处理文件无法识别并运行第二个(下一个)命令
- chart.js - ChartJS:删除由刻度标签引起的图表右侧的填充
- apache-camel - 如何将未编组的数据处理为原始数据?
- php - 将 textFile 日期保存到 MySQL
- c++ - 如何在另一个类中重载运算符 ==
- python - 使用参考列在数据框中的行值之间进行选择?