Python 当只有一个值返回时,如何对多值列表使用append-in-for循环?

Python 当只有一个值返回时,如何对多值列表使用append-in-for循环?,python,Python,我试图创建一个函数,当传递一个任意长度的名称列表时,它将只返回一个长度正好为四个字符的名称列表。我希望输出列表以逗号分隔 我已经附上了我尝试过的代码。我试图让函数遍历传递给函数的list参数'x',然后如果该列表值的长度为四个字符,则将其添加到输出列表中 我希望输出列表是['Ryan','Mary'],但它只是['Ryan'] 我对这一切都不熟悉,不明白为什么我所做的不起作用 output = [] def friend(x): for i in range(len(x)):

我试图创建一个函数,当传递一个任意长度的名称列表时,它将只返回一个长度正好为四个字符的名称列表。我希望输出列表以逗号分隔

我已经附上了我尝试过的代码。我试图让函数遍历传递给函数的list参数
'x'
,然后如果该列表值的长度为四个字符,则将其添加到输出列表中

我希望输出列表是
['Ryan','Mary']
,但它只是
['Ryan']

我对这一切都不熟悉,不明白为什么我所做的不起作用

output = []
def friend(x):
    for i in range(len(x)):
        if len(x[i]) == 4:
            return output.append(x[i])

list = ["Ryan","Kieran","Jason","Mary"]
friend(list)
print(output)

你不想这么早回来。你没有给你的函数足够的通过你的列表来获得多于1个4个字母的元素。您希望在返回列表之前花时间构建列表。我会建立输出列表,然后,一旦我们完全完成循环,返回它:

def friend(x):
    output = []
    for i in range(len(x)):
        if len(x[i]) == 4:
            output.append(x[i])
    return output

list = ["Ryan","Kieran","Jason","Mary"]
myOutput = friend(list)
print(myOutput)```

您可以使用列表

    output = [name for name in list_of_names if len(name)==4]
    print(output)

另一种方法是,使用列表理解,可以缩短函数,如:

def friend(x):
    return [k for k in x if len(k)==4]
list_ = ["Ryan","Kieran","Jason","Mary"]
print(friend(list_))
输出

['Ryan', 'Mary']

实际上有很多方法来解决这个问题

一种方法是列表理解:

list = ["Ryan","Kieran","Jason","Mary"]

print([name for name in list if len(name) == 4]) # iterate list using variable name, check if len(name) == 4, and add it to the list if it's true
另一种方法是利用收益率:

def friend(x):
    for i in range(len(x)):
        if len(x[i]) == 4:
            yield x[i] # note that this returns a generator, not a list. Basically, you can only iterate once

首先我想补充一点,您不应该使用
列表
(和其他类型名称)作为变量名。也可以使用
filter
函数列出理解,例如用法:

lst = ["Ryan","Kieran","Jason","Mary"]
output = list(filter(lambda x:len(x)==4,lst))
print(output) #['Ryan', 'Mary']

请注意,
filter
要求函数将
lst
元素作为参数,并返回
s
False
(丢弃)或
True
(保留)。我想指出的是,我个人认为列表理解在这种情况下更具可读性,我只想显示函数
filter
,在需要从
list

中选择某些元素的情况下可能会遇到这种情况,正如您所看到的,return结束函数并返回值。因此,您需要收集值,并且只在收集完所有值后返回。(提示:在循环之后/循环之外)OP,另一件需要注意的事情是,您可以直接迭代元素,您不需要
range
,您只需对x中的i使用
,然后
如果len(i)==4