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 个元素。如果这个问题已经被问到,请指出给我,我真的很感激。谢谢!
一种常见的方法是生成器表达式。生成器表达式会在需要时产生它的值,因此不会立即创建整个列表
您的问题的解决方案可能是这样的
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
我想你可以尝试以下应用于迭代器的用户函数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)
归档时间: |
|
查看次数: |
190 次 |
最近记录: |