web-dev-qa-db-ja.com

タプルに値を追加する方法は?

('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')]

何らかの方法で可能ですか?

70
Shahzad

タプルは不変であり、変更されることは想定されていません-それがリストタイプの目的です。各タプルをoriginalTuple + (newElement,)に置き換えて、新しいタプルを作成できます。例えば:

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

ただし、リストを最初から使用することをお勧めします。リストの方がアイテムの挿入が速いためです。

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

117
AndiDog

構文に基づいて、これは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')]
15
atp

Pythonではできません。タプルは不変です。

含むリストで、タプル('1', '2', '3', '4')を別の('1', '2', '3', '4', '1234')タプルに置き換えることもできます。

8

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

しかし、最善の解決策はリストです。 Tupleを必要とする関数またはメソッドを呼び出す必要がある場合は、Tuple(list)を使用してTupleを作成します。

7
Ryan

他の回答で述べたように、タプルは一度作成されると不変であり、リストの方が目的に合っている場合があります。

ただし、追加のアイテムを含む新しいタプルを作成する別のオプションは、splat演算子を使用することです。

new_Tuple = (*old_Tuple, 'new', 'items')

looksは新しいTupleのようであるため、この構文が好きです。

スプラットを使用した場合の潜在的な解決策は次のとおりです。

list = [(*i, ''.join(i)) for i in list]

6
Terrabits

私はTuplelistに関連するいくつかの詳細を調べていましたが、私が理解したことは次のとおりです。

  • タプルはHeterogeneousコレクションデータ型です
  • タプルの固定長(タプルタイプごと)
  • タプルは常に有限です

したがって、新しい項目をタプルに追加するには、それをlistにキャストし、その上でappend()操作を実行してから、再度タプルにキャストする必要があります。

しかし、個人的に私が質問について感じたのは、タプル有限固定長アイテムである場合、およびそれらのデータ型を使用している場合アプリケーションロジックではnotが新しいアイテムを追加するシナリオになるはずですORそのアイテムの値を更新します。 タプルのリストの代わりにリストのリストである必要があります、私はこれで正しいですか?

4
Dipak
    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)
2
Viktor
OUTPUTS = []
for number in range(len(list_of_tuples))):
    tup_ = list_of_tuples[number]
    list_ = list(tup_)  
    item_ = list_[0] + list_[1] + list_[2] + list_[3]
    list_.append(item_)
    OUTPUTS.append(Tuple(list_))

アウトプットはあなたが望むものです

0
Questwalker