2014-01-08 103 views
1

我需要使用氣泡排序方法對我的計算機科學類中的項目對元組進行排序。這些項目都是整數。如何將一個元組中的一個元素的值賦給Python中的另一個元素?

SwapAgain = True 

    while SwapAgain == True: 
     SwapAgain = False 
     for item in xrange(len(mytuple)): 
      if mytuple[item] > mytuple[item + 1]: 
       SwapAgain = True 
       temp = mytuple[item] 
       mytuple[item] = mytuple[item + 1] 
       mytuple[item + 1] = temp 

    return mytuple 

我想分配的元組到另外一個項目的價值,但是當我嘗試上面的代碼我得到這個錯誤:

mytuple[item] = mytuple[item + 1]

TypeError: 'tuple' object does not support item assignment

我寧願使用列表,但我的老師只給我們提供了一個特定的元組。我非常感謝我能得到的任何幫助。謝謝!

+5

您無法將新項目分配給現有元組中的位置。根據定義,它們是不可變的,沒有解決方法。你可以做的是用這些值創建一個新的元組或者使用一個列表 –

+1

由於元組是不可變的,你自己的選項將會按照你想要的順序創建一個新的元素。由於在排序過程中這可能會發生多次,所以在一開始就將元組轉換爲列表一次,然後將最終結果轉換回元組將會比每次更換一對元素時更有效。 – martineau

回答

2

元組是一種不可變的數據類型。一旦你創建它,你不能改變它。因此,與列表這樣做纔有意義,你必須返回一個元組在排序完成,例如選擇:

SwapAgain = True 
myList = list(myTuple) 

while SwapAgain == True: 
    SwapAgain = False 
    for i in xrange(len(myList)): 
     if myList[i] > myList[i + 1]: 
      SwapAgain = True 
      temp = myList[i] 
      myList[i] = myList[i + 1] 
      myList[i + 1] = temp 

return myList # or return tuple(myList) if you want 
0

元組是python中的固定結構,因爲編譯器告訴你'元組'對象不支持項目分配。你應該將它複製到一個新列表

0

元組是不可變的,所以你可以設置新的值或刪除項目,但是如果你的老師已經特別要求元組,那麼你可以創建另一個元組稱爲排序或某些地方你添加這些新的項目,並最終用這個替換原來的元組。

0

與你的條件是,你必須使用根據一個元組你的老師,這將是最好的解決辦法是,改變元組的列表

temp_list = list(myTuple) 

名單上進行冒泡排序,然後排序列表又變成一個元組

final_tuple = tuple(temp_list) 

所以,最後你會得到一個排序的元組。

相關問題