Python 当只有一个值返回时,如何对多值列表使用append-in-for循环?
我试图创建一个函数,当传递一个任意长度的名称列表时,它将只返回一个长度正好为四个字符的名称列表。我希望输出列表以逗号分隔 我已经附上了我尝试过的代码。我试图让函数遍历传递给函数的list参数Python 当只有一个值返回时,如何对多值列表使用append-in-for循环?,python,Python,我试图创建一个函数,当传递一个任意长度的名称列表时,它将只返回一个长度正好为四个字符的名称列表。我希望输出列表以逗号分隔 我已经附上了我尝试过的代码。我试图让函数遍历传递给函数的list参数'x',然后如果该列表值的长度为四个字符,则将其添加到输出列表中 我希望输出列表是['Ryan','Mary'],但它只是['Ryan'] 我对这一切都不熟悉,不明白为什么我所做的不起作用 output = [] def friend(x): for i in range(len(x)):
'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
元素作为参数,并返回sFalse
(丢弃)或True
(保留)。我想指出的是,我个人认为列表理解在这种情况下更具可读性,我只想显示函数filter
,在需要从list
中选择某些元素的情况下可能会遇到这种情况,正如您所看到的,return结束函数并返回值。因此,您需要收集值,并且只在收集完所有值后返回。(提示:在循环之后/循环之外)OP,另一件需要注意的事情是,您可以直接迭代元素,您不需要range
,您只需对x中的i使用,然后如果len(i)==4