('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')]
何らかの方法で可能ですか?
タプルは不変であり、変更されることは想定されていません-それがリストタイプの目的です。各タプルをoriginalTuple + (newElement,)
に置き換えて、新しいタプルを作成できます。例えば:
t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)
ただし、リストを最初から使用することをお勧めします。リストの方がアイテムの挿入が速いためです。
もう1つのヒント:プログラムの組み込み名list
を上書きせず、変数l
または他の名前を呼び出します。ビルトイン名を上書きすると、現在のスコープでそれを使用できなくなります。
構文に基づいて、これは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')]
Pythonではできません。タプルは不変です。
含むリストで、タプル('1', '2', '3', '4')
を別の('1', '2', '3', '4', '1234')
タプルに置き換えることもできます。
他の人が答えたように、pythonのタプルは不変であり、「変更」する唯一の方法は、追加された要素を含む新しいものを作成することです。
しかし、最善の解決策はリストです。 Tupleを必要とする関数またはメソッドを呼び出す必要がある場合は、Tuple(list)を使用してTupleを作成します。
他の回答で述べたように、タプルは一度作成されると不変であり、リストの方が目的に合っている場合があります。
ただし、追加のアイテムを含む新しいタプルを作成する別のオプションは、splat演算子を使用することです。
new_Tuple = (*old_Tuple, 'new', 'items')
looksは新しいTupleのようであるため、この構文が好きです。
スプラットを使用した場合の潜在的な解決策は次のとおりです。
list = [(*i, ''.join(i)) for i in list]
私はTuple
とlist
に関連するいくつかの詳細を調べていましたが、私が理解したことは次のとおりです。
Heterogeneous
コレクションデータ型ですしたがって、新しい項目をタプルに追加するには、それをlist
にキャストし、その上でappend()
操作を実行してから、再度タプルにキャストする必要があります。
しかし、個人的に私が質問について感じたのは、タプルが有限、固定長アイテムである場合、およびそれらのデータ型を使用している場合アプリケーションロジックではnotが新しいアイテムを追加するシナリオになるはずですORそのアイテムの値を更新します。 タプルのリストの代わりにリストのリストである必要があります、私はこれで正しいですか?
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)
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_))
アウトプットはあなたが望むものです