提问者:小点点

对于返回f字符串的循环函数


我是Python新手,正在尝试编写一个函数,该函数接受字典列表并返回一个新的字符串列表,其中每个字典中的名字键和姓氏键都连接在一起。

names = [{'first': 'John', 'last': 'Smith'}, {'first': 'Jessie', 'last': 'Snow'}]


 def name_function(lst):     
     for name in lst:       
         return f"{name['first']} {name['last']}" 

 names_function(names)
 'John Smith'

我写了一个for循环,它遍历字典列表并返回一个f字符串,该字符串连接每个字典中的名和姓键,但是,该循环没有遍历到第一个键以外,我希望有人能指出这个问题。


共2个答案

匿名用户

当您有一个循环时,在循环内也有一个<code>return</code>。在列表的第一次迭代中,此<code>return</code>将被命中,函数的执行将停止,只返回该行上的值-这是一个字符串-

在返回之前,您需要向函数添加一个列表以用作累加器 —

def names_function(lst):  
    names = []      
    for name in lst:       
        names.append(f"{name['first']} {name['last']}")
    return names   

或者使用列表理解

def names_function(lst):  
    return [f"{name['first']} {name['last']}" for name in lst]

names_function(names)

两者都将输出

['John Smith', 'Jessie Snow']

您还可以用< code>yield替换< code>return,将它变成一个生成器。要获得所有的值,您需要迭代生成器(或者对其调用< code>list)

def names_function(lst):     
    for name in lst:       
        yield f"{name['first']} {name['last']}" 

list(names_function(names))

结果是一样的

['John Smith', 'Jessie Snow']

匿名用户

如果您想获取所有名称:

def names_function(lst):
    ret=""
    for name in lst:
        ret += f"{name['first']} {name['last']}\n"
    return ret

或者

def names_function(lst):
    return [f"{name['first']} {name['last']}" for name in lst]

如果要创建生成器对象:

def names_function(lst):
    return (f"{name['first']} {name['last']}" for name in lst)