Python列表元素按索引返回指定值的函数实现问题求助
问题
需求是用Python函数实现:根据列表元素的索引返回对应值,第一个元素返回0,最后一个返回-1,其余返回2。不用函数时能正常输出所有结果,但用函数时遇到问题:
- return放在循环内,只返回第一个值
- return放在循环外,只返回最后一个值
以下是尝试的代码:
无函数实现代码
a= [1,2,3,4,5,6] for i, x in enumerate(a): if i==0: number=0 elif i==len(a)-1: number=-1 else: number=2 print (number)
函数内return在循环中的代码
def cs(): a= [1,2,3,4,5,6] for i, x in enumerate(a): if i==0: number=0 elif i==len(a)-1: number=-1 else: number=2 print (number) return (number) cs()
函数内return在循环外的代码
def cs(): a= [1,2,3,4,5,6] for i, x in enumerate(a): if i==0: number=0 elif i==len(a)-1: number=-1 else: number=2 print (number) return (number) cs()
问题原因
- return在循环内:
return语句会直接终止函数执行,第一次循环走到return时,函数就结束了,只会返回第一个元素对应的0。 - return在循环外:循环结束后,
number变量保存的是最后一次循环赋值的结果(也就是最后一个元素对应的-1),所以返回的是最后一个值。
解决方案
要返回所有元素对应的结果,需要把每个循环生成的number收集起来,最后统一返回整个结果列表。
方法1:用列表收集结果
def cs(): a = [1,2,3,4,5,6] result = [] # 创建空列表存储结果 for i, x in enumerate(a): if i == 0: number = 0 elif i == len(a) - 1: number = -1 else: number = 2 result.append(number) # 将每个结果添加到列表中 print(result) return result cs()
方法2:用列表推导式简化代码
如果想更简洁,可以用列表推导式一行完成逻辑:
def cs(): a = [1,2,3,4,5,6] length = len(a) result = [0 if i == 0 else -1 if i == length-1 else 2 for i in range(length)] print(result) return result cs()
两种方法运行后都会输出[0, 2, 2, 2, 2, -1],并返回这个列表,符合需求。
内容的提问来源于stack exchange,提问作者Cassie
相关产品推荐
相关产品推荐

