タプルへの変数の追加


282

私はPythonを学び、データベース接続を作成しています。DBに追加しようとしているときに、情報からタプルを作成してDBに追加することを考えています。

私がしていること:ユーザーから情報を取得して変数に格納しています。これらの変数をタプルに追加できますか?構文について教えてください。

また、これを行う効率的な方法がある場合は、共有してください...

EDIT 私はこの質問を少し編集してみましょう...私はDBに情報を入力するタプルを必要としています。情報がDBに追加されたら、タプルを削除する必要がありますか?つまり、タプルはもう必要ありません。

回答:


370

タプルは不変です。構築後、それらに含まれる変数を変更することはできません。ただし、それらを連結またはスライスして、新しいタプルを形成することができます。

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

そしてもちろん、既存の値からそれらを構築します:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

これらのタプルは、ユーザー入力後にデータベースに追加する場合にのみ必要です。データベースへの更新が完了したら、これらのタプルを破棄する必要がありますか?
amit

5
dbの更新後にタプルを破棄する必要はありません。それらが範囲外になった場合、それらはガベージコレクションされます。
ジャスティンスタンダード

文字列自体を壊すことなく文字列をタプルに追加するには、stackoverflow.com
a / 16449189を

を追加するだけでa = ()b= a + (5)bは5になります。したがってb= a + (5,)、はにつながりb = (5,)ます。タプル。
yashgarg1232

221

空のタプルから始めることができt = ()ます。で追加でき+ますが、別のタプルを追加する必要があります。単一の要素を追加する場合は、それをシングルトンにしますt = t + (element,)。末尾のコンマの有無にかかわらず、複数の要素のタプルを追加できます。

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)

20
この例の場合、次のことも実行できます。t = ()次にt += (1,)
ダグラスデンハートグ'20年

2
末尾のコンマを含めることにはどのような利点がありますか?
Splic

13
シングルトンが括弧内の要素間の混乱を避けるために必要な末尾のカンマsi。括弧は演算順に使用されるため、(7)は7ですが、(7、)は1要素のタプルで、要素は7です。同様に、3 *(7 + 8)= 45ですが、3 *( 7 + 8、)=(15、15、15)-それは理にかなっていますか?
ダニエル

2
複数要素のタプルの場合、末尾のコンマは100%オプションです。これを含めると、「これはタプルです。タプルであること、タプルがどのように機能するか、そしてそれができることはわかっています」を意味します。しかし、コンマはより自然に見えるかもしれません。Idk。あなた次第。
ダニエル

タプルは不変であることに注意することが重要だと思います-実際には変更できません。このソリューションでは既存の 2つのタプルに基づいて新しいタプル作成します
That1Guy

44

まだ言及されていない別の戦術は、リストへの追加を使用して、最後にリストをタプルに変換することです:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

戻り値

(0, 1, 2, 3, 4)

タプルを関数の引数として渡す必要があるときに、これを使用することがあります。これは、numpy関数によく必要です。


3
これの逆、つまりlist(someTuple)機能することを知っておくと便利です。2つのオブジェクトタイプは明らかに交換可能です
khaverim '08

本当に互換性はありません。タプルからリストへの変換はリスト内のすべての要素をコピーするので、それを避けるための場所は確実にあります
gbtimmon

41

Python 3では、を使用*して、新しい要素とともに、元のタプルから要素の新しいタプルを作成できます。

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
これは私にとって圧倒的に最もpythonicです。
Bumsik Kim

6
これは、の10倍の速度ですtuple1 + ("baz",)
Mateen Ulhaq 2018

9

「情報がDBに追加されたら、タプルを削除する必要がありますか?これは、タプルが必要なくなったことを意味します。」

番号。

一般に、何かを削除する理由はありません。削除にはいくつかの特別なケースがありますが、非常にまれです。

狭いスコープ(つまり、クラス内の関数定義またはメソッド関数)を定義するだけで、オブジェクトはスコープの最後にガベージコレクションされます。

何も削除する必要はありません。

[注意。私は、オブジェクトを削除しようとするだけでなく、常に「リセット」メソッドを記述してオブジェクトをクリアする男と協力しました。彼がそれらを保存して再利用しようとしていたように。また、ばかげた考えです。使用しなくなったオブジェクトは無視してください。コードの十分小さなブロックで関数を定義する場合、これ以上考える必要はありません。]


7

次のように簡単です。

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

ただし、Pythonのタプルは不変であるため、一度作成したタプルに変数を追加することはできません。


3

他の回答で述べたように、既存のタプルを変更することはできませんが、常に新しいタプルを作成できます(既存のタプルや他のソースから一部またはすべてのアイテムを取得する場合があります)。

たとえば、関心のあるすべてのアイテムがスカラー変数にあり、それらの変数の名前がわかっている場合は、次のようになります。

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

たとえば、この例のように使用されます:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

もちろん、この1つのケースはより簡単に(x, y, z)(または名前を完全に前に付けて(23, 45, 67))表現されますが、このmaketupleアプローチはいくつかのより複雑なケース(たとえば、使用する名前も動的に決定され、計算)。


2

Pythonでのこの構文は次のとおりです。

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

一度設定すると、タプルは変更できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.