Python เพิ่มรายการลงใน tuple


160

ฉันมี object.ID บางตัวที่ฉันพยายามเก็บไว้ในเซสชันผู้ใช้เป็น tuple เมื่อฉันเพิ่มคนแรกที่มันทำงาน แต่ tuple ดูเหมือน(u'2',)แต่เมื่อฉันพยายามที่จะเพิ่มใหม่โดยใช้ข้อผิดพลาดได้mytuple = mytuple + new.idcan only concatenate tuple (not "unicode") to tuple

คำตอบ:


294

คุณต้องทำให้องค์ประกอบที่สองเป็น 1-tuple เช่น:

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

5
@ ILMostro_7 ขึ้นอยู่กับว่า b คืออะไร
Jon Clements

หรืออีกไม่นานa += ('z',)ดังที่กล่าวไว้ในคำตอบที่ร้อง
artu-hnrq

54

เนื่องจาก Python 3.5 ( PEP 448 ) คุณสามารถทำการแกะออกได้ภายใน tuple, list set และ dict:

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

33

จาก tuple ไปยัง list to tuple:

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

จุดนี่คือ: รายการเป็นประเภทลำดับที่ไม่แน่นอน ดังนั้นคุณสามารถเปลี่ยนรายการที่กำหนดโดยการเพิ่มหรือลบองค์ประกอบ Tuple เป็นประเภทลำดับที่ไม่เปลี่ยนรูป คุณไม่สามารถเปลี่ยนสิ่งอันดับได้ ดังนั้นคุณต้องสร้างใหม่หนึ่ง


5
นี่จะช้ากว่าการเพิ่มสอง tuples สองเท่า
jamylak

2
อย่างไรก็ตามถ้าคุณสังเกตว่า OP เพื่อแปลงไปlistที่จุดเริ่มต้นให้ผนวกรายการแล้วเมื่อสิ้นสุดการแปลงtupleเป็นวิธีที่ดีที่สุด +1
jamylak

สองรายการรวมถึงรายการ itemin แรก แต่คุณพูดถูกฉันควรที่จะเพิ่มตัวอย่าง = รายการที่ยาวกว่าดูการแก้ไขของฉัน
kiriloff

13

Tuple สามารถอนุญาตให้เพิ่ม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')


1

บรรทัดล่างวิธีที่ง่ายที่สุดในการผนวกเข้ากับ tuple คือการใส่องค์ประกอบที่ถูกเพิ่มด้วยวงเล็บและเครื่องหมายจุลภาค

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.