2011-02-06 3 views
45

Я работаю над скриптом, где у меня есть список кортежей, например ('1','2','3','4'). например .:Как добавить значение к кортежу?

list = [('1','2','3','4'), 
     ('2','3','4','5'), 
     ('3','4','5','6'), 
     ('4','5','6','7')] 

Теперь мне нужно добавить '1234', '2345', '3456' и '4567' соответственно в конце каждого кортежа. например:

list = [('1','2','3','4','1234'), 
     ('2','3','4','5','2345'), 
     ('3','4','5','6','3456'), 
     ('4','5','6','7','4567')] 

Возможно ли это каким-либо образом?

+7

решения межъязыкового? ;) – Snowbear

+2

Добро пожаловать в StackOverflow! Справа, когда вы задавали свой вопрос, был этот удобный ** Как форматировать ** поле. Стоит прочитать, как [ссылка на страницу] (http://stackoverflow.com/editing-help) из ** [?] ** чуть выше области вопросов. –

+0

Какой язык? –

ответ

8

В Python вы не можете. Кортежи неизменяемы.

В содержащем списке вы можете заменить tuple ('1', '2', '3', '4') разными путями ('1', '2', '3', '4', '1234').

12

Основываясь на синтаксисе, я предполагаю, что это Python. Смысл кортежа в том, что он является неизменным, так что вы должны заменить каждый элемент нового кортежа:

list = [l + (''.join(l),) for l in list] 
# output: 
[('1', '2', '3', '4', '1234'), 
('2', '3', '4', '5', '2345'), 
('3', '4', '5', '6', '3456'), 
('4', '5', '6', '7', '4567')] 
+4

Это работает, конечно. Но должно ли это действительно быть сделано? Интересно. Потому что это побеждает цель иметь кортеж в первую очередь. Или я ошибаюсь? – user225312

79

кортежи неизменны и не должны быть изменены - это то, что тип списка для. Вы можете заменить каждый кортеж на originalTuple + (newElement,), создав таким образом новый кортеж. Например:

t = (1,2,3) 
t = t + (1,) 
print t 
(1,2,3,1) 

Но я бы предпочел, чтобы предлагать списки с самого начала, потому что они быстрее вставляют элементы.

И еще один намек: не перезаписывайте встроенное имя list в своей программе, скорее вызовите переменную l или другое имя. Если вы переписываете встроенное имя, вы больше не сможете его использовать в текущей области.

+14

Сокращение 't + = 1,' –

6

Как и другие люди, кортежи в python неизменяемы, и единственный способ «изменить» один - создать новый с включенными добавленными элементами.

Но лучшим решением является список. Когда нужно вызвать какую-либо функцию или метод, требующий кортежа, создайте кортеж, используя кортеж (список).

2
list_of_tuples = [('1', '2', '3', '4'), 
         ('2', '3', '4', '5'), 
         ('3', '4', '5', '6'), 
         ('4', '5', '6', '7')] 


    def mod_tuples(list_of_tuples): 
     for i in range(0, len(list_of_tuples)): 
      addition = '' 
      for x in list_of_tuples[i]: 
       addition = addition + x 
      list_of_tuples[i] = list_of_tuples[i] + (addition,) 
     return list_of_tuples 

    # check: 
    print mod_tuples(list_of_tuples) 
3

Я шел через некоторые детали, связанные с tuple и list, и то, что я понял это:

  • Кортежи Heterogeneous коллекции типа данных
  • Кортеж имеет фиксированную длину (по типу кортежа)
  • Tuple is Всегда конечный

Таким образом, для добавления нового элемента в кортеже, нужно привести его к list, и сделать append() операцию на него, затем снова бросил его обратно в кортеже.

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

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