2010-02-22 38 views
31

Có, tôi hiểu bộ dữ liệu là không thay đổi nhưng tình huống là như vậy mà tôi cần phải chèn thêm một giá trị vào mỗi bộ. Vì vậy, một trong các mục là số tiền, tôi cần phải thêm một mục mới bên cạnh nó bằng một đơn vị tiền tệ khác, như vậy:Chèn một mục vào một Tuple

('Product', '500.00', '1200.00') 

Có thể?

Cảm ơn!

+3

Chào mừng bạn đến với lập trình chức năng. Bạn không 'cập nhật' một bộ dữ liệu, bạn đang tạo một bộ tuple mới từ một bộ dữ liệu cũ. Sử dụng 'collections.namedtuple' và nó sẽ hiển nhiên rằng bạn đang tạo một kiểu đối tượng mới từ một kiểu đối tượng cũ. –

Trả lời

43

Bạn có thể truyền nó vào danh sách, chèn mục, sau đó đưa nó trở lại một bộ tuple.

a = ('Product', '500.00', '1200.00') 
a = list(a) 
a.insert(3, 'foobar') 
a = tuple(a) 
print a 

>> ('Product', '500.00', '1200.00', 'foobar') 
+10

Hoặc bất kỳ phương pháp nào không sửa đổi bộ gốc ban đầu, nhưng thay thế nó thay thế. – Steve314

+2

Đây thực sự không phải là một giải pháp tốt. Bạn chỉ có thể sử dụng '+ = ('foobar',)' cho cùng một ảnh hưởng. – gbtimmon

40

Kể từ khi bộ dữ liệu không thay đổi, điều này sẽ dẫn đến một bộ tuple mới. Chỉ cần đặt nó trở lại nơi bạn có cái cũ.

sometuple + (someitem,) 
3

một cách là để chuyển đổi nó để liệt kê

>>> b=list(mytuple) 
>>> b.append("something") 
>>> a=tuple(b) 
18

Bạn hoàn toàn cần phải thực hiện một tuple mới - sau đó bạn có thể rebind tên (hoặc bất kỳ tài liệu tham khảo [s]) từ tuple cũ cái mới. Nhà điều hành += có thể giúp (nếu chỉ có một tham chiếu đến các tuple cũ), ví dụ .:

thetup += ('1200.00',) 

làm các phụ thêm và rebinding trong một ngã swoop.

+0

vâng, như tôi đã học được cách khó khăn: P + = không cố sửa đổi tham chiếu tại chỗ, nó gán lại –

+0

@Matt, chính xác - nhưng với một tuple hoặc chuỗi, đó là tất cả những gì bạn có thể làm (nếu bạn áp dụng nó một danh sách, nó _does_ sửa đổi nó tại chỗ - phần "phân công lại" là một chi phí không đáng kể), –

+0

Luôn luôn bị hack của tôi lên. + = trong tâm trí của tôi phải là một sửa đổi tại chỗ. Nếu bạn không thể làm điều đó, dường như không làm điều đó. Tôi không phải là đặc tả Python, và rõ ràng bất cứ điều gì ý kiến ​​của tôi, nó làm những gì nó được định nghĩa để làm. Và nó không phải là một khiếu nại khách quan lành mạnh anyway - số nguyên là mutable và bạn có thể + = chúng đủ dễ dàng, mà một lần nữa có nghĩa là thay thế.Về cơ bản trực giác xung đột giữa các mô hình ngôn ngữ. – Steve314

7

Đối với trường hợp mà bạn không thêm vào phần cuối của tuple

>>> a=(1,2,3,5,6) 
>>> a=a[:3]+(4,)+a[3:] 
>>> a 
(1, 2, 3, 4, 5, 6) 
>>> 
12
def tuple_insert(tup,pos,ele): 
    tup = tup[:pos]+(ele,)+tup[pos:] 
    return tup 

tuple_insert(tup,pos,9999) 

TUP: tuple
pos: Vị trí để chèn
ele: Element để chèn

2

Bạn cũng có thể viết mã đơn giản như sau:

T += (new_element,) 
3

t = (1,2,3,4,5)

t = t + (6,7)

đầu ra:

(1,2,3,4,5 , 6,7)

Các vấn đề liên quan