Python thêm mục vào tuple


160

Tôi có một số object.ID-s mà tôi cố lưu trữ trong phiên người dùng dưới dạng tuple. Khi tôi thêm cái đầu tiên, nó hoạt động nhưng tuple trông giống như (u'2',)nhưng khi tôi cố gắng thêm cái mới bằng cách sử dụng mytuple = mytuple + new.idcó lỗi can only concatenate tuple (not "unicode") to tuple.

Câu trả lời:


294

Bạn cần làm cho phần tử thứ hai thành 1 tuple, ví dụ:

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

11
Tại sao bạn cần dấu phẩy này
SIslam 7/2/2016

32
@SIslam Nếu không có dấu phẩy, nó sẽ chỉ được hiểu là dấu ngoặc thường được sử dụng để đi theo thứ tự ưu tiên:(a+b)*c
Joseph Young

2
Vâng, nhưng bạn có thể làm new = a + bthay vì new = a + (b,). AFAICT, hoạt động tương tự trong python3 và python2.7.
ILMostro_7

5
@ ILMostro_7 phụ thuộc vào b là gì
Jon Clements

Hoặc ngắn gọn a += ('z',), như được đề cập trong câu trả lời dưới đây
artu-hnrq

54

Vì Python 3.5 ( PEP 448 ), bạn có thể giải nén trong bộ dữ liệu, bộ danh sách và lệnh:

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

33

Từ tuple đến danh sách đến tuple:

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

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

tuple(l)

Hoặc với một danh sách dài hơn các mục để chắp thêm

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

l = list(a)

for x in items:
    l.append(x)

print tuple(l)

mang đến cho bạn

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

Vấn đề ở đây là: Danh sách là một loại trình tự có thể thay đổi . Vì vậy, bạn có thể thay đổi một danh sách nhất định bằng cách thêm hoặc xóa các yếu tố. Tuple là một loại trình tự bất biến . Bạn không thể thay đổi một tuple. Vì vậy, bạn phải tạo một cái mới .


5
Việc này sẽ chậm gấp đôi khi chỉ cần thêm hai bộ dữ liệu
jamylak vào

2
Tuy nhiên, nếu bạn lưu ý đến OP để chuyển đổi listngay từ đầu, hãy thêm các mục và sau đó chuyển đổi cuối cùng thành tuplethì đây là giải pháp tốt nhất +1
jamylak

hai mục bao gồm danh sách itemin đầu tiên. nhưng bạn đã đúng, tốt hơn tôi nên thêm một ví dụ dài hơn = danh sách, xem phần chỉnh sửa của tôi
kiriloff

13

Tuple chỉ có thể cho phép thêm tuplevào nó. Cách tốt nhất để làm điều đó là:

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

Tôi đã thử kịch bản tương tự với dữ liệu dưới đây, tất cả dường như đang hoạt động tốt.

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

Mẫu số 1

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

Mẫu số 2

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

tùy chọn thứ hai không hoạt động. TypeError: 'int' object is not iterable
Obi Wan - PallavJha

1

Tóm lại, cách dễ nhất để thêm vào một tuple là gửi phần tử được thêm bằng dấu ngoặc đơn và dấu phẩy.

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

out: ('a', 4, 'string', 5.0)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.