2010-08-06 27 views
8

Câu hỏi có một chút gây hiểu lầm, bởi vì một bộ túp là không thay đổi. Những gì tôi muốn là:Python: làm thế nào để thay đổi (cuối) yếu tố của bộ tuple?

Có một tuple a = (1, 2, 3, 4) có được một tuple b đó là chính xác như a trừ đối số cuối cùng đó là, nói, gấp đôi so với yếu tố cuối cùng của a.

=> b == (1, 2, 3, 8)

+3

Nếu bạn có thể trợ giúp, hãy xem xét sử dụng danh sách nếu bạn định thực hiện thao tác tại chỗ các phần tử. – user37078

+0

Tôi nghĩ nó có ý nghĩa hơn khi sử dụng các bộ dữ liệu trong kịch bản của tôi - tôi cần trình bày các phiên bản chương trình, theo mẫu 'major.minor.branch.build -> (chính, phụ, chi nhánh, xây dựng)' và tôi cần lấy phiên bản 'phiên bản trước' từ một phiên bản nhất định –

+0

Bạn cũng có thể sử dụng lớp 'distutils.version.StrictVersion' cho các số phiên bản. – SiggyF

Trả lời

19
b = a[:-1] + (a[-1]*2,) 

Những gì tôi đang làm gì ở đây là nối hai tuples, tất cả mọi thứ có chứa đầu tiên nhưng yếu tố cuối cùng, và một tuple mới chứa đột biến của phần tử cuối cùng. Kết quả là một tuple mới chứa những gì bạn muốn.

Lưu ý rằng đối với + để trả về một bộ, cả hai toán hạng phải là một bộ tuple.

+2

Làm thế nào về '(a [-1] * 2,)'? Ở trên ném một TypeError. (dấu phẩy sau là cần thiết cho một tuple một mục) – Skilldrick

+0

@Skilldrick cảm ơn, đã chỉnh sửa – Ivo

6

tôi sẽ làm một cái gì đó như:

b=list(a) 
b[-1]*=2 
b=tuple(b) 
+1

+1: điều này khá dễ đọc và linh hoạt. – EOL

5

Dưới đây là một cách để làm việc đó:

>>> a = (1, 2, 3, 4) 
>>> b = a[:-1] + (a[-1]*2,) 
>>> a 
(1, 2, 3, 4) 
>>> b 
(1, 2, 3, 8) 

Vì vậy, những gì xảy ra trên dòng thứ hai? a [: - 1] có nghĩa là tất cả ngoại trừ phần tử cuối cùng. [-1] là phần tử cuối cùng, và chúng ta nhân nó thành hai. (A [-1] * 2,) biến kết quả thành một bộ tuple, và tuple thái lát được nối với nó bằng cách sử dụng toán tử +. Kết quả được đưa vào b.

Bạn có thể phù hợp với trường hợp cụ thể của mình.

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