首页 > 解决方案 > 每次运行函数时打印出列表的 n 个元素

问题描述

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

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

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

a
b
c
d
e

第二次:

f
g
h
i
j

我试过这个:

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])

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

标签: pythonlistfor-loop

解决方案


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

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

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

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


推荐阅读