[英]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.