gpt4 book ai didi

python - 迭代生成器时调用 iter 和 next

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:14 24 4
gpt4 key购买 nike

我正在编写一个函数,它接受一个迭代器、一个 int 和一个填充,如果迭代的值少于 n 个值,则在末尾添加一个填充。我能够让该函数完全针对迭代器参数运行不是生成器类型,如果是生成器类型,则会引发打字错误异常,我将在该代码块中处理生成器。问题是我能够生成生成器内的所有值,但由于外部 for 循环的干扰,我无法找到在末尾添加填充的方法。我需要通过调用 iter 和 next 来实现这一点,我一直在玩它,但它没有工作......这是我要解释的函数

def n_with_pad(iterable,n,pad=None):

for i in range(n):
try:
yield iterable[i]

except IndexError:
yield pad

except TypeError:
for i in iterable:
yield i

所以我按如下方式调用这个函数

for i n_with_pad('function',3):
print(i,end=' ')

我会打印:'f' 'u' 'n'

但是添加具有少于 n 个值的可迭代的 pad 将打印如下

for i n_with_pad('abcdefg',10,'?'):
print(i,end=' ')

“a”、“b”、“c”、“d”、“e”、“f”、“g”、“?”、“?”和“?”

对于第二个电话,我可以接听“a”、“b”、“c”、“d”、“e”、“f”、“g”使用我到目前为止的代码,但似乎无法添加 ???满足 n 值

最佳答案

我认为尝试 __getitem__ 没有任何好处方法并回到迭代器协议(protocol)。只需使用可迭代,这甚至是变量的名称!

def n_with_pad(iterable,n,pad=None):
it = iter(iterable)
for _ in range(n):
yield next(it,pad)

演示:

''.join(n_with_pad('function',3,pad='?'))
Out[6]: 'fun'

''.join(n_with_pad('function',10,pad='?'))
Out[7]: 'function??'

关于python - 迭代生成器时调用 iter 和 next,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com