在Python中按顺序循环遍历列表

时间:2015-01-04 19:30:28

标签: python list python-2.7 loops

我对编程非常陌生,所以请耐心等待...我一直在学习Python,我只是做了一个评估,包括使用当前值作为下一个索引值来循环遍历列表。这大致是问题所在:

您的零索引数组长度N为正整数和负整数。编写一个遍历列表的函数,创建一个新列表,并返回新列表的长度。循环遍历列表时,可以使用当前值作为下一个索引值。当A [i] = -1

时,它会停止循环

例如:

A[0] = 1
A[1] = 4
A[2] = -1
A[3] = 3
A[4] = 2 

这将创建:

newlist = [1, 4, 2, -1]

len(newlist) = 4

这是时间而我无法完成,但这是我想出来的。任何批评都表示赞赏。就像我说我是新人并且正在努力学习。与此同时,我会继续寻找。提前谢谢!

def sol(A):
    i = 0
    newlist = []
    for A[i] in range(len(A)):
        e = A[i]
        newlist.append(e)
        i == e
        if A[i] == -1:
            return len(newlist)

3 个答案:

答案 0 :(得分:1)

如果您要查找最少的代码行,这可能是最简单的方法。

A = [1,4,-1,3,2]
B = []

n = 0

while A[n] != -1:
    B.append(A[n])
    n = A[n]

B.append(-1)

print(len(B))

答案 1 :(得分:0)

首先,请注意for A[i] in range(len(A))是您当然希望避免的模式,因为它是一个模糊的结构,通过存储增加的整数修改列表A进入A[i]。要循环A的元素,请使用for val in A。要将索引循环到A,请使用for ind in xrange(len(A))

for循环(通常是首选的Python循环结构)不是解决此问题的正确工具,因为该问题需要以序列内容强制要求的不可预测的顺序迭代序列。为此,您需要使用更通用的while循环并自行管理列表索引。这是一个例子:

def extract(l):
    newlist = []
    ind = 0
    while l[ind] != -1:
        newlist.append(l[ind])
        ind = l[ind]
    newlist.append(-1)   # the problem requires the trailing -1
    print newlist        # for debugging
    return len(newlist)

>>> extract([1, 4, -1, 3, 2])
[1, 4, 2, -1]
4

请注意,将值集合到新列表中并不能在任何类型的真实场景中真正有意义,因为列表在函数外部不可见。一个更明智的实现只会在每个循环传递中递增一个计数器并返回计数器的值。但由于问题明确要求维护列表,因此上述代码必须这样做。

答案 2 :(得分:0)

使用while循环更简单:

data = [1,4,-1,3,2]
ls = []
i = 0
steps = 0
while data[i] != -1:
    ls.append(data[i])
    i = data[i]
    steps += 1
    assert steps < len(data), "Infinite loop detected"
ls.append(-1)
print ls, len(ls)