为什么我没有得到完整的索引! (python列表)

时间:2012-11-14 02:39:00

标签: python list indexing range

输入:

def part3 (x):  
    for i in range (len(x)):  
        while i <= len(x):  
            print (x[i]) 
            return x[i+1]  


x=[5,2,3]  
x.sort()  
print(x[0],x[1], x[2])  
print(part3(x))  

输出:

2 3 5  
2  
3  

我的问题:为什么我不能在3之后得到5?!?!功能不应该转到x [2]?!?!

3 个答案:

答案 0 :(得分:2)

函数在循环的第一次迭代时返回,因为那里有一个return语句。所以,当你有

print(part3(x))

首先print(x[i])(其中i = 0,因为这是第一次迭代)在你的while循环中执行,然后函数的返回值(x[i+1])是由上面的原始印刷声明印刷。

致电x.sort()后,x将为[2, 3, 4],因此x[0]2x[0+1] = x[1]3,这解释了你的输出。

不确定您希望使用此代码实现的目标,因此很难就如何修复它提供建议。如果你只想打印x的内容,那么你就会让它变得比以前更加复杂,因为你可以简单地做到这一点

for i in x:
    print(i)

请注意,需要在此处使用return语句,因此您不需要多余的print;即。

print(part3(x))

将成为

part3(x) 

因为你在函数本身进行打印。

答案 1 :(得分:1)

你做错了。我认为重点是打印x的每个元素。

你想:

def part3(x):
    for element in x:
        print(element)

现在注意:

  1. for循环中不需要while循环。
  2. 你不想在循环中返回任何东西,因为这会突破循环并退出函数。
  3. 在python中,您可以直接遍历数组而不使用索引变量。

答案 2 :(得分:0)

你可以看到'2'作为内部印刷的结果,你看到'3'是打印'返回x [i + 1]'的结果,你没有看到'5'bcoz你离开你的while循环和一个功能。

如果您需要的只是打印所有值并返回最后一个值,您可以尝试:

def part3 (x):  
    for val in x:  
       print val 
    return x[-1]

如果你需要知道索引,那么你可以尝试枚举:

def part3 (x):  
    for i, val in enumerate(x):  
       print i, val 
    return x[-1]