python - 在使用对 iter 和 while 的调用时,如何将字符串的最后 x 个字符作为 python 生成器删除?
问题描述
我在编写一个生成器函数时遇到了麻烦,该函数需要一个可迭代的参数和一个整数 x 参数。它输出除最后一个 x 值之外的每个值。它不知道如何计算可迭代输出的值。
我不知道如何使用 while 循环和 iter 来做到这一点。我还需要使用一种理解来创建一个列表来最多存储 x 值。
假设我们调用:
for i in func_function(“abcdefghijk”,5):
print(i,end =”)
它应该打印abcdef
。
这是我尝试过的:
def func_function(iterable, x):
while True:
l = []
for x in iter(iterable):
if len(x) == x:
yield x
解决方案
诀窍是把它从向前看变成向后看。
我会通过迭代输入并维护最新n
元素的窗口来做到这一点:
def except_last_n(iterable, n):
last_n = []
for val in iterable:
last_n.append(val)
if len(last_n) > n:
yield last_n.pop(0)
for val in except_last_n(range(10), 3):
print(val)
将其重写为while
循环,iter
留给读者作为练习。
def except_last_n(iterable, n):
last_n = [val for val in iterable]
if len(last_n) > n:
yield last_n.pop(0)
推荐阅读
- pyspark - pyspark 每 n 行聚合一次
- python - 将一个 DataFrame 中的列用作 MultiIndex 以在另一个 DataFrame 中进行 t-test
- android - 将后端添加到 Ionic 应用程序以从 MySQL 数据库中读取
- python - Keras 和 Tensorflow - 层参数作为预测期间要更改的变量
- vb.net - 是否可以在一个类中定义和控制事物,而不是在 VB 的“表单”(类外)中分配?
- c# - 由于框架版本不同,C# 解决方案无法编译
- babel-loader - Babel-loader 8 抱怨找不到已弃用的 babel-preset-es2015
- python-3.x - Python 3.7 - 安装 Scikit-Learn 的问题
- python - 无法从具有不同深度的某些链接中解析产品名称
- java - 使用 PDFBox 并使用 Maven 构建时出现 NoClassDefFoundError