2011-02-06 12 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!あなたの質問をしていたときの右側に、この便利な**フォーマット方法**ボックスがありました。 ** [?] **の質問エリアのすぐ上にある[page linked](http://stackoverflow.com/editing-help)のように、読む価値があります。どの言語? –

+0

? –

答えて

8

Pythonでは、あなたはできません。タプルは不変です。

タプル('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) 

しかし、私はむしろ項目を挿入する方が速いので、最初からリストを使用することをお勧めしたいと思います。

もう1つのヒント:プログラム内の組み込みの名前listを上書きしないで、変数lまたは他の名前を呼び出します。ビルトイン名を上書きすると、現在のスコープでは使用できなくなります。

+14

短く 't + = 1、' –

6

他の人が答えたように、Pythonのタプルは不変です。一つを変更する唯一の方法は、追加された要素を含む新しいものを作成することです。

しかし、最良の解決策はリストです。タプルを必要とする関数やメソッドが必要な場合は、tuple(list)を使用してタプルを作成します。

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

私はtuplelistに関連するいくつかの詳細を通過し、私が理解することはありました:

  • タプルは、データ型
  • タプルあり固定長(タプル型あたり)Heterogeneousコレクションです
  • タプルは常に有限

だから、タプルに新しい項目を追加するために、listにキャストし、それにappend()操作を行う必要があり、その後、再びタプルにそれをキャスト。タプル有限固定長項目と我々は我々のアプリケーションロジックでこれらのデータ型を使用している場合は、その後がいけないことになっている場合は、私が質問について感じたことは、ある

しかし、個人的には、新しいアイテムを追加するか、アイテムの値を更新するシナリオです。 その代わりにのタプルのリストそれはリストのリストそれ自身であるべきですか?

関連する問題