如何解决生成器未在Python中创建任何输出
我正在尝试使用以下生成器,但未生成任何输出。有想法吗?谢谢
def generate_numbers(number):
"""To generate numbers"""
for i in range(number):
ratings = []
for j in categories:
ratings.append(random.randint(0,5))
score = list(zip(categories,ratings))
filtered_score = (s for s in score if s[1] != 0)
yield filtered_score
解决方法
您需要产生最终过滤集中的每个条目。
尝试以下代码:
import random
def generate_numbers(number):
"""To generate numbers"""
categories = ['a','b','c','d','e']
for i in range(number):
ratings = []
for j in categories:
ratings.append(random.randint(0,5))
score = list(zip(categories,ratings))
for fs in (s for s in score if s[1] != 0):
yield fs
for x in generate_numbers(3):
print(x)
输出
('a',4)
('c',1)
('d',4)
('e',4)
('a',2)
('b',3)
('c',4)
('d',3)
('e',1)
('b',1)
('c',4)
,
问题出在这里:您要返回的是生成器对象,而不是值。
有几种方法可以解决此问题。两个直截了当的是
-
在调用函数中,使用两个循环而不是一个循环(对应于函数中使用的两个循环)。
for x in generate_numbers(5): for y in x: print(y)
-
在函数中更改倒数第二行,以便您创建
list
之类的东西而不是生成器filtered_score = [s for s in score if s[1] != 0] # notice the use of square brackets
P.S。使用两种方法中的任何一种,不能同时使用!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。