【发布时间】:2021-04-09 04:21:37
【问题描述】:
我有一个字符串列表,我需要创建一个函数,每次运行时打印出列表的 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 个元素。 如果已经问过这个问题,请指出给我,我真的很感激。谢谢!
【问题讨论】:
-
是要耗尽迭代器一次还是要遍历列表多次?
-
@theProgrammer 我想任何一种方式都可以,只要我只打印出 n 个连续的元素(而不是每次都打印出相同的 5 个元素,而不是整个列表)
-
@VarvaraLitvinova 是否要保留列表中的元素。还是可以在我们迭代时删除元素?
-
如果你想以一种干净的方式做到这一点,你需要创建某种带有状态的数据结构,也就是一个对象。关闭也可以。在这种情况下,您将拥有一个函数,它将您的列表作为输入并返回一个函数,该函数在您每次调用它时传递列表的一部分。
-
正如 nilo 所说,您必须依靠在函数调用之间存储状态。您要么更改全局变量(影响全局状态),这很简单,但不鼓励作为编程实践,要么将状态本地存储在函数或对象中。这可以(至少)使用自定义类、闭包、迭代器或利用可变默认参数来完成。我赞成这个问题,因为它有可能用不同的技术触发如此多不同的答案,让它变得有趣。