Pythonはタプルにアイテムを追加します


160

ユーザーセッションにタプルとして保存しようとするobject.ID-sがあります。最初のものを追加すると機能しますが、タプルは次のようになりますが、エラー(u'2',)を使用して新しいものを追加しようとするとmytuple = mytuple + new.idエラーが発生しますcan only concatenate tuple (not "unicode") to tuple

回答:


294

2番目の要素を1タプルにする必要があります。例:

a = ('2',)
b = 'z'
new = a + (b,)

11
このコンマが必要な理由
SIslam、

32
コンマなし@SIslam、それだけで通常の優先順位を回避するために使用ブラケットとして解釈されます:(a+b)*c
ジョセフ・ヤング

2
そうですが、のnew = a + b代わりにできますnew = a + (b,)。AFAICT、python3とpython2.7で同じように機能します。
ILMostro_7 2018年

5
@ ILMostro_7はbの内容に依存します
Jon Clements

あるいはまもなくa += ('z',)、で述べたように怒鳴るの答え
Artuの-hnrq

54

Python 3.5(PEP 448)以降、タプル、リストセット、およびdict内でアンパックできます。

a = ('2',)
b = 'z'
new = (*a, b)

33

タプルからリスト、タプルへ:

a = ('2',)
b = 'b'

l = list(a)
l.append(b)

tuple(l)

または、追加するアイテムのより長いリストを使用して

a = ('2',)
items = ['o', 'k', 'd', 'o']

l = list(a)

for x in items:
    l.append(x)

print tuple(l)

あなたにあげる

>>> 
('2', 'o', 'k', 'd', 'o')

ここでのポイントは次のとおりです。リストは変更可能なシーケンス型です。したがって、要素を追加または削除することにより、特定のリストを変更できます。タプルは不変のシーケンス型です。タプルは変更できません。したがって、新しいものを作成する必要があります。


5
これは2つのタプルを追加する場合の2倍の速度になります
jamylak

2
ただしlist、最初に変換するOPに注意し、アイテムを追加し、最後に変換するtuple場合は、これが最良の解決策+1
jamylak

リストの最初のアイテムを含む2つのアイテム。しかし、あなたは正しいです。もっと長い=リストの例を追加した方がいいです。私の編集を参照してください
kiriloff

13

タプルはtupleそれに追加することしかできません。それを行う最善の方法は次のとおりです。

mytuple =(u'2',)
mytuple +=(new.id,)

以下のデータで同じシナリオを試しましたが、すべて正常に動作しているようです。

>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')

11
>>> x = (u'2',)
>>> x += u"random string"

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    x += u"random string"
TypeError: can only concatenate tuple (not "unicode") to tuple
>>> x += (u"random string", )  # concatenate a one-tuple instead
>>> x
(u'2', u'random string')

2

#1フォーム

a = ('x', 'y')
b = a + ('z',)
print(b)

#2フォーム

a = ('x', 'y')
b = a + tuple('b')
print(b)

2番目のオプションは機能しません。TypeError: 'int' object is not iterable
Obi Wan-PallavJha 2017年

1

結論として、タプルに追加する最も簡単な方法は、追加される要素を括弧とコンマで囲むことです。

t = ('a', 4, 'string')
t = t + (5.0,)
print(t)

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