4 回答

TA貢獻1802條經驗 獲得超10個贊
好吧,有幾件事...
首先,for 循環在 python 中自動增加它們的變量。
所以:
for k in range(8):
...
i -= 1
k += 1
應該:
for k in range(8):
...
i -= 1
無需手動增加 k。
接下來的列表不是數組。
python 中的列表與 C 等語言中的數組有很大不同。列表是可變的,并且默認情況下通過引用傳遞。所以當你嘗試創建一個空數組時:
numbersrev = numbers #blank array for reverse
您實際上numbers是從AND引用相同的“列表”numbersrev
你應該做的是numbersrev = []
然后在 for 循環中,只需附加到 numberrev 而不是分配。
for k in range(numLength):
numbersrev.append(numbers[i])
print ("The ", i," element of numbers is the ", k," element of numbersrev")
i -= 1
最后
你可以/應該在 for 循環中引用數字的長度而不是硬編碼的值,但是你如何擁有它仍然有效(假設你只得到8個數字)
for k in range(numLength):
...
全部一起
numbers = read() #creates numbers array out of the txt file
numbersrev = [] #blank array for reverse
numLength = len(numbers) #measures the length of the array
print(numbers)
print("Array length of numbers: ", numLength)
i = numLength
i = i-1 #since the array starts at 0 instead of 1
for k in range(numLength):
numbersrev.append(numbers[i])
print ("The ", i," element of numbers is the ", k," element of numbersrev")
i -= 1
print(numbersrev)

TA貢獻1830條經驗 獲得超9個贊
您在這里所做的就是使用以下行將反轉數組指定為普通數組:
numbersrev = numbers #blank array for reverse
您實際上對該循環所做的事情是這樣的:
numbers[0] = numbers[9] # [10, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[1] = numbers[8] # [10, 9, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[2] = numbers[7] # [10, 9, 8, 4, 5, 6, 7, 8, 9, 10]
numbers[3] = numbers[6] # [10, 9, 8, 7, 5, 6, 7, 8, 9, 10]
numbers[4] = numbers[5] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
numbers[5] = numbers[4] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
numbers[6] = numbers[3] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
numbers[7] = numbers[2] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
numbers[8] = numbers[1] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
numbers[9] = numbers[0] # [10, 9, 8, 7, 6, 6, 7, 8, 9, 10]
...
如果您像這樣分配變量:
numLength = len(numbers) #measures the length of the array
numbersrev = [0]*numLength #blank array for reverse
您將得到正確的答案,因為反向列表不再指向正常列表。

TA貢獻1840條經驗 獲得超5個贊
你面臨的問題是因為這條線
numbersrev = numbers #blank array for reverse
在這一行中,您不是創建空數組,而是將numbers數組的引用保存在名為 的新變量中numbersrev。這意味著當您在數組中進行操作時,numbersrev您也會更改 的值numbers。為了避免此類問題,您有兩種選擇:
使用切片制作數組的副本
通過這種方式,您可以復制數組的值,而不是數組的引用。這意味著您對新數組所做的更改不會更改原始數組。
numbersrev = numbers[:]
創建一個空數組并使用追加而不是賦值
此更改與您所做的略有不同,但基本上您不是創建數組的副本,而是創建一個新數組,該數組將填充到 for 循環中,如下所示:
numbers.rev = []
...
for k in range(8):
numbersrev.append(numbers[i])
因此,使用第一個選項并更改 k 索引中的一些內容,我們有這樣的代碼:
numbers = [2, 4, 9, 11, 8, 3, 2, 5, 10] # you can change for read
numbersrev = numbers[:] #copy array elements
numLength = len(numbers) #array length
print(numbers)
print("Array length of numbers: ", numLength)
i = numLength - 1
# you don't need to initialize k because it's initialized and incremented with range in the loop
for k in range(numLength):
numbersrev[k] = numbers[i]
print ("The ", i," element of numbers is the ", k," element of numbersrev")
i -= 1
print(numbersrev)
希望這能幫助你解決問題,就像注釋一樣,你可以通過多種方式解決這個問題:切片(numbers[::-1])、列表理解和其他一些。所有方法都是有效的,以防萬一您想探索更多。

TA貢獻1793條經驗 獲得超6個贊
numbersrev = numbers
設置numbersrev
為指向與 相同的列表numbers
,這意味著當您修改numbers
或numbersrev
同時修改另一個列表時。要制作對象的實際副本,您需要調用numbersrev = numbers.copy()
. 另外,@sahasrara62的評論是正確的,你需要打電話for k in range(numLength)
而不是for k in range(8)
添加回答
舉報