每次运行函数时打印出列表的 n 个元素

Var*_*ova 6 python for-loop list

我有一个字符串列表,我需要创建一个函数,每次运行时都会打印出列表的 n 个元素。例如:

book1 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
Run Code Online (Sandbox Code Playgroud)

我第一次运行该函数时的预期输出,如果n = 5

a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)

第二次:

f
g
h
i
j
Run Code Online (Sandbox Code Playgroud)

我试过这个:

def print_book(book):
    printed = book
    while printed != []:
        for i in range(0, len(book), 5):
            new_list = (book[i:i+5])
            for el in new_list:
                print(el)
        break
    del(printed[i:i+10])
Run Code Online (Sandbox Code Playgroud)

我要么打印出整个列表,要么在每次运行该函数时打印前 n 个元素。如果这个问题已经被问到,请指出给我,我真的很感激。谢谢!

the*_*mer 5

一种常见的方法是生成器表达式。生成器表达式会在需要时产生它的值,因此不会立即创建整个列表

您的问题的解决方案可能是这样的

book1 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']

def yield_book(book1):
    for i in book1:
        yield i;
                
def print_n_item(gen, n):
    count = 0
    for i in gen:
        if count == n:
            return
        print(i)
        count += 1
        
gen = yield_book(book1)
print_n_item(gen, 5) # prints a,  b,  c, d, e
print_n_item(gen, 5) # prints f,  g,  h,  i,  j
print_n_item(gen, 5) # prints k,  l,  m,  n,  o

Run Code Online (Sandbox Code Playgroud)

这种方法耗尽了迭代器,因此可以使用一次,为了再次迭代,你必须调用yield_book返回一个新的generator


Tho*_*ing 4

我想你可以尝试以下应用于迭代器的用户函数book

def print_book(book):
    cnt = 0
    while cnt < 5:
        try:
            print(next(book))
        except StopIteration:
            print("You have reached the end!")
            break
        cnt += 1
Run Code Online (Sandbox Code Playgroud)

这样

>>> bk1 = iter(book1)
>>> print_book(bk1)
a
b
c
d
e
>>> print_book(bk1)
f
g
h
i
j
>>> print_book(bk1)
k
l
m
n
o
>>> print_book(bk1)
You have reached the end!
Run Code Online (Sandbox Code Playgroud)