可能重复:
function in function
我该如何制作功能。显示所有不良值而不只是一个?
def get_bad_results(person_results):
for i in person_results:
if i[1]>i[3] or i[1]<i[2]:
return i[0]
test_results = [["White blood cells",8.5,2,7],
["Neutrophils",5.3,2.5,5],
["Red blood cells", 12.4, 9,15]]
a = get_bad_results(test_results)
print a
显示White blood cells
而不是
White blood cells, Neutrophils
答案 0 :(得分:4)
您正在寻找生成生成器的yield
关键字:
def get_bad_results(person_results):
for i in person_results:
if i[1]>i[3] or i[1]<i[2]:
yield i[0]
然后,您可以迭代函数的结果(例如,调用list()
来创建列表)。生成器比直接生成列表更可取,因为这意味着这些值是懒惰生成的,在很多情况下更节省内存。
作为旁注,索引i
有点难看,在这种情况下,解压缩值会使代码更具可读性:
def get_bad_results(person_results):
for name, age, height, weight in person_results:
if age > weight or age < height:
yield name
(当然,由于我不知道上下文,因此我在这里编写了名称。)
答案 1 :(得分:2)
该函数将返回适合该语句的第一个匹配项。要返回all,可以将它们保存在列表中,当循环完成后,返回列表。
for i in person_results:
bads = []
if i[1]>i[3] or i[1]<i[2]:
bads.append(i[0])
return bads
答案 2 :(得分:1)
如果您不想使用生成器,可以将坏元素附加到列表中然后将其返回:
def get_bad_results(person_results):
bad_results = []
for i in person_results:
if i[1] > i[3] or i[1] < i[2]:
bad_results.append(i[0])
return bad_results
或使用列表理解:
def get_bad_results(person_results):
return [i[0] for i in person_results if i[1] > i[3] or i[1] < i[2]]
答案 3 :(得分:0)
为什么不从您正在进行比较的功能中打印?然后你不需要任何额外的跟踪
def get_bad_results(person_results):
for i in person_results:
if i[1]>i[3] or i[1]<i[2]:
print i[0]