4 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
好吧,有幾件事...
首先,for 循環(huán)在 python 中自動(dòng)增加它們的變量。
所以:
for k in range(8):
...
i -= 1
k += 1
應(yīng)該:
for k in range(8):
...
i -= 1
無(wú)需手動(dòng)增加 k。
接下來(lái)的列表不是數(shù)組。
python 中的列表與 C 等語(yǔ)言中的數(shù)組有很大不同。列表是可變的,并且默認(rèn)情況下通過(guò)引用傳遞。所以當(dāng)你嘗試創(chuàng)建一個(gè)空數(shù)組時(shí):
numbersrev = numbers #blank array for reverse
您實(shí)際上numbers是從AND引用相同的“列表”numbersrev
你應(yīng)該做的是numbersrev = []
然后在 for 循環(huán)中,只需附加到 numberrev 而不是分配。
for k in range(numLength):
numbersrev.append(numbers[i])
print ("The ", i," element of numbers is the ", k," element of numbersrev")
i -= 1
最后
你可以/應(yīng)該在 for 循環(huán)中引用數(shù)字的長(zhǎng)度而不是硬編碼的值,但是你如何擁有它仍然有效(假設(shè)你只得到8個(gè)數(shù)字)
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貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
您在這里所做的就是使用以下行將反轉(zhuǎn)數(shù)組指定為普通數(shù)組:
numbersrev = numbers #blank array for reverse
您實(shí)際上對(duì)該循環(huán)所做的事情是這樣的:
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
您將得到正確的答案,因?yàn)榉聪蛄斜聿辉僦赶蛘A斜怼?/p>

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
你面臨的問(wèn)題是因?yàn)檫@條線
numbersrev = numbers #blank array for reverse
在這一行中,您不是創(chuàng)建空數(shù)組,而是將numbers數(shù)組的引用保存在名為 的新變量中numbersrev。這意味著當(dāng)您在數(shù)組中進(jìn)行操作時(shí),numbersrev您也會(huì)更改 的值numbers。為了避免此類問(wèn)題,您有兩種選擇:
使用切片制作數(shù)組的副本
通過(guò)這種方式,您可以復(fù)制數(shù)組的值,而不是數(shù)組的引用。這意味著您對(duì)新數(shù)組所做的更改不會(huì)更改原始數(shù)組。
numbersrev = numbers[:]
創(chuàng)建一個(gè)空數(shù)組并使用追加而不是賦值
此更改與您所做的略有不同,但基本上您不是創(chuàng)建數(shù)組的副本,而是創(chuàng)建一個(gè)新數(shù)組,該數(shù)組將填充到 for 循環(huán)中,如下所示:
numbers.rev = []
...
for k in range(8):
numbersrev.append(numbers[i])
因此,使用第一個(gè)選項(xiàng)并更改 k 索引中的一些內(nèi)容,我們有這樣的代碼:
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)
希望這能幫助你解決問(wèn)題,就像注釋一樣,你可以通過(guò)多種方式解決這個(gè)問(wèn)題:切片(numbers[::-1])、列表理解和其他一些。所有方法都是有效的,以防萬(wàn)一您想探索更多。

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