2014-01-08 2 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

tuple фиксированная структура в python, так как complier сказал, что объект tuple не поддерживает назначение элемента. вы должны скопировать его в новый список

0

Tuple's неизменяемы, поэтому вы можете устанавливать новые значения или удалять элементы. Но если ваш учитель специально запросил кортеж, вы можете создать другой кортеж, отсортированный или что-то, где вы добавляете эти новые и, наконец, замените исходный кортеж на этот.

0

В качестве условия с вами в том, что вы должны использовать кортеж в соответствии с ваш учитель, что было бы наилучшим решением является то, что изменить кортеж в список

temp_list = list(myTuple) 

выполнить пузырьковую сортировку в списке, а затем снова изменить отсортированный список к кортежу

final_tuple = tuple(temp_list) 

Итак, наконец, вы получите отсортированный кортеж.

Смежные вопросы