簡體   English   中英

在Python中不按順序遍歷列表

[英]Looping through a list not in order in Python

我對編程非常陌生,所以請忍受...我一直在學習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)

如果您要尋找最少的代碼行,這可能是最簡單的方法。

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))

首先,請注意, for A[i] in range(len(A))中的for A[i] in range(len(A))您肯定要避免使用這種模式,因為它是一種模糊的構造,它將通過將遞增的整數存儲到A[i]中來修改列表A 要遍歷A元素,請在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

請注意,在任何實際情況下,將值收集到新列表中實際上都沒有意義,因為該列表以任何方式在函數外部均不可見。 一個更明智的實現方式是在每個循環遍歷中簡單地增加一個計數器,然后返回計數器的值。 但是由於問題明確要求維護列表,因此必須執行上述代碼。

使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM