首页 > 解决方案 > 在使用对 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

标签: pythonloopsiteratorgenerator

解决方案


诀窍是把它从向前看变成向后看。

我会通过迭代输入并维护最新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)

推荐阅读