2010-09-27 3 views
5

Làm cách nào tôi có thể nhận được tổng hai chiều của hai bộ dữ liệu có độ dài bằng nhau? Ví dụ nếu tôi có (0, -1,7) và (3,4, -7), tôi muốn có (3,3,0) làm câu trả lời.Làm cách nào để tôi có thể tổng hợp hai bộ dữ liệu có độ dài bằng nhau

+3

Một bản sao của một câu hỏi hỏi một năm rưỡi trước đây mà không nhận được bất kỳ câu trả lời tốt có vẻ tốt đẹp. Tất cả các câu trả lời trong đó dựa trên bản đồ, ít rõ ràng hơn là biểu thức hiểu/tạo danh sách (bên dưới). Câu trả lời được chấp nhận trong đó là tồi tệ hơn nhiều - ghi đè một lớp chỉ để thực hiện một phương pháp trên nó không có ý nghĩa gì cả. –

+0

Tôi cho rằng lý do cho câu trả lời được chấp nhận trong câu hỏi đó là vì đó là hành vi kỳ lạ đặc biệt mà câu hỏi được yêu cầu, vì vậy nó không thực sự là lỗi của người trả lời. –

Trả lời

11
tuple(map(lambda (x, y): x + y, zip((0,-1,7), (3,4,-7)))) 

Nếu bạn muốn tránh maplambda sau đó bạn có thể làm:

tuple(x + y for x,y in zip((0,-1,7), (3,4,-7))) 

EDIT: Là một trong những câu trả lời chỉ ra, bạn có thể dùng số tiền thay vì chia một cách rõ ràng các bộ trở lại bởi zip. Vì vậy, bạn có thể viết lại các mẫu mã trên như hình dưới đây:

tuple(sum(t) for t in zip((0,-1,7), (3,4,-7))) 

tham khảo: zip, map, sum.

+0

Việc hiểu danh sách thường thích hợp hơn. Điều này là trực quan hơn ngay lập tức hơn tất cả các câu trả lời chức năng trong # 497885. –

+0

@Glenn: đã đồng ý. Điều đó nói rằng bằng cách nào đó tôi thấy dễ dàng hơn để đầu tiên suy nghĩ về bản đồ và bộ lọc và sau đó bản đồ nó (không có ý định chơi chữ: P) để hiểu danh sách. –

+0

Tôi là một cách khác xung quanh: danh sách comprehensions (trong trường hợp này, biểu thức máy phát điện, thực sự) là tự nhiên trực quan với tôi, nhưng tôi phải suy nghĩ về bản đồ - có lẽ bởi vì nó ít thường xuyên được sử dụng trong Python. –

4
>>> t1 = (0,-1,7) 
>>> t2 = (3,4,-7) 
>>> tuple(i + j for i, j in zip(t1, t2)) 
(3, 3, 0) 
3

Ngoài ra (tốt nếu bạn có các bộ rất lớn hoặc bạn có kế hoạch để làm các phép toán khác với họ):

> import numpy as np 
> t1 = (0, -1, 7) 
> t2 = (3, 4, -7) 
> at1 = np.array(t1) 
> at2 = np.array(t2) 
> tuple(at1 + at2) 
(3, 3, 0) 

Nhược điểm: chuẩn bị dữ liệu hơn là cần thiết. Có thể quá mức trong hầu hết các trường hợp.

Ưu điểm: hoạt động rất rõ ràng và cô lập. Có lẽ rất nhanh với những bộ đồ lớn.

6

Sử dụng sum():

>>> tuple(sum(pair) for pair in zip((0,-1,7), (3,4,-7))) 

hoặc

>>> tuple(map(sum, zip((0,-1,7), (3,4,-7)))) 
+0

'tuple (bản đồ (toán tử.thêm, (0, -1, 7), (3, 4, -7)))' –