亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有反轉功能的反轉數組,但循環不起作用

沒有反轉功能的反轉數組,但循環不起作用

慕桂英3389331 2023-07-27 16:47:50
因此,我嘗試在不使用反向函數的情況下從 .txt 文件反轉數組。這就是我所擁有的。numbers = read() #creates numbers array out of the txt filenumbersrev = numbers #blank array for reversenumLength = len(numbers) #measures the length of the arrayprint(numbers)print("Array length of numbers: ", numLength)i = numLengthi = i-1 #since the array starts at 0 instead of 1k = 0for k in range(8):    numbersrev[k] = numbers[i]   print ("The ", i," element of numbers is the ", k," element of numbersrev")   i -= 1   k += 1print(numbersrev)這是我在vscode上調試后得到的結果:[2, 4, 9, 11, 8, 3, 2, 5, 10]Array length of numbers:  9The  8  element of numbers is the  0  element of numbersrevThe  7  element of numbers is the  1  element of numbersrevThe  6  element of numbers is the  2  element of numbersrevThe  5  element of numbers is the  3  element of numbersrevThe  4  element of numbers is the  4  element of numbersrevThe  3  element of numbers is the  5  element of numbersrevThe  2  element of numbers is the  6  element of numbersrevThe  1  element of numbers is the  7  element of numbersrev[10, 5, 2, 3, 8, 3, 2, 5, 10]頂部數組是原始數組,底部數組是假定的反轉數組我一生都無法找出為什么它在中途停止改變numbersrev數組。有人知道可能是什么原因嗎?
查看完整描述

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)


查看完整回答
反對 回復 2023-07-27
?
慕標琳琳

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

您將得到正確的答案,因為反向列表不再指向正常列表。


查看完整回答
反對 回復 2023-07-27
?
慕斯709654

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])、列表理解和其他一些。所有方法都是有效的,以防萬一您想探索更多。


查看完整回答
反對 回復 2023-07-27
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

numbersrev = numbers設置numbersrev為指向與 相同的列表numbers,這意味著當您修改numbersnumbersrev同時修改另一個列表時。要制作對象的實際副本,您需要調用numbersrev = numbers.copy(). 另外,@sahasrara62的評論是正確的,你需要打電話for k in range(numLength)而不是for k in range(8)



查看完整回答
反對 回復 2023-07-27
  • 4 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號