Python menambahkan item ke tuple

160

Saya punya beberapa object.ID-s yang saya coba simpan di sesi pengguna sebagai tuple. Ketika saya menambahkan yang pertama itu berfungsi tetapi tuple terlihat seperti (u'2',)tetapi ketika saya mencoba untuk menambahkan yang baru menggunakan mytuple = mytuple + new.idkesalahan yang didapat can only concatenate tuple (not "unicode") to tuple.

Goran
sumber

Jawaban:

294

Anda harus menjadikan elemen kedua 1-tupel, misalnya:

a = ('2',)
b = 'z'
new = a + (b,)
Jon Clements
sumber
11
Mengapa Anda memerlukan koma ini
SIslam
32
@ SIslam Tanpa koma, itu hanya akan ditafsirkan sebagai tanda kurung yang biasanya digunakan untuk menyiasati urutan prioritas:(a+b)*c
Joseph Young
2
yeah, tetapi Anda dapat melakukan new = a + bbukan new = a + (b,). AFAICT, berfungsi sama di python3 dan python2.7.
ILMostro_7
5
@ ILMostro_7 tergantung seperti apa b
Jon Clements
Atau a += ('z',)
singkatnya
54

Karena Python 3.5 ( PEP 448 ) Anda dapat melakukan pembongkaran di dalam tuple, set daftar, dan dict:

a = ('2',)
b = 'z'
new = (*a, b)
tanpa alasan
sumber
33

Dari tuple ke daftar ke tuple:

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

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

tuple(l)

Atau dengan daftar item yang lebih panjang untuk ditambahkan

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

l = list(a)

for x in items:
    l.append(x)

print tuple(l)

Memberi anda

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

Intinya di sini adalah: Daftar adalah jenis urutan bisa berubah . Jadi, Anda dapat mengubah daftar yang diberikan dengan menambahkan atau menghapus elemen. Tuple adalah tipe urutan yang tidak berubah . Anda tidak dapat mengubah tupel. Jadi, Anda harus membuat yang baru .

Kiriloff
sumber
5
Ini akan dua kali lebih lambat dari hanya menambahkan dua tupel
jamylak
2
Namun jika Anda perhatikan OP untuk mengkonversi ke listdi awal, tambahkan item, dan kemudian di akhir konversi ke tuplemaka ini adalah solusi terbaik +1
jamylak
dua item termasuk daftar itemin pertama. tetapi Anda benar, saya sebaiknya menambahkan contoh yang lebih panjang = daftar, lihat edit saya
kiriloff
13

Tuple hanya dapat memperbolehkan tupleuntuk menambahkannya . Cara terbaik untuk melakukannya adalah:

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

Saya mencoba skenario yang sama dengan data di bawah ini semua sepertinya berfungsi dengan baik.

>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')
pengguna3798348
sumber
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')
jamylak
sumber
2

Formulir # 1

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

Formulir # 2

a = ('x', 'y')
b = a + tuple('b')
print(b)
britodfbr
sumber
Opsi kedua tidak berfungsi. TypeError: 'int' object is not iterable
Obi Wan - PallavJha
1

Intinya, cara termudah untuk menambahkan tuple adalah dengan melampirkan elemen yang ditambahkan dengan tanda kurung dan koma.

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

out: ('a', 4, 'string', 5.0)
diacak-acak
sumber