在使用对iter和while的调用时,如何作为python生成器删除字符串的最后x个字符?
我在编写一个生成器函数时遇到了问题,该函数包含一个iterable和一个以上的参数,即整数x。它输出除最后x个值以外的所有值。它不知道如何计算iterable输出的值 我不知道如何使用while循环以及iter来实现这一点。我还需要使用一个理解,创建一个列表来存储最多x个值 让我们称之为:在使用对iter和while的调用时,如何作为python生成器删除字符串的最后x个字符?,python,loops,iterator,generator,Python,Loops,Iterator,Generator,我在编写一个生成器函数时遇到了问题,该函数包含一个iterable和一个以上的参数,即整数x。它输出除最后x个值以外的所有值。它不知道如何计算iterable输出的值 我不知道如何使用while循环以及iter来实现这一点。我还需要使用一个理解,创建一个列表来存储最多x个值 让我们称之为: for i in func_function(“abcdefghijk”,5): print(i,end =”) 它应该打印abcdef 以下是我尝试过的: def func_function(iterab
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)
将其重写为,而循环和iter
留给读者作为练习
def except_last_n(iterable, n):
last_n = [val for val in iterable]
if len(last_n) > n:
yield last_n.pop(0)
字符串是可切片的:
def func_function(iterable, x):
yield from iterable[:-x]
print(func_function("asdfgkjbewqrfgkjb",8))
k = list(func_function("asdfgkjbewqrfgkjb",8))
print(k) # ['a', 's', 'd', 'f', 'g', 'k', 'j', 'b', 'e']
不需要while循环、iter和l=[]
from collections import deque
def drop_last_few(iterable, x=5):
it = iter(iterable)
data = deque(maxlen=x)
data.extend([next(it) for i in range(x)])
for val in it:
yield data[0]
data.append(val)
这使用一个双端队列作为存储,最多缓存x
个元素。演示:
>>> print(*drop_last_few("abcdefghijk", 5))
a b c d e f
如何使用while循环和iter来实现这一点?我们是否可以重写以获得列表理解>?为什么要这样做?@sparkecode:欢迎使用堆栈溢出。这不是一个“请为我编码”的网站。我们很乐意为您提供帮助,但您也需要付出一些努力。您能做到最后吗?而不是PopRable,问题在于它假设iterable支持切片,而它可能支持也可能不支持slicing@NPE-OP askes用于字符串-字符串是可切片的。@SparkRecording字符串支持切片