Trong một danh sách các số, chúng ta muốn tìm ra ba phần tử có thể tham gia để đưa ra một tổng nhất định. Chúng tôi gọi nó là sinh ba. Và trong danh sách có thể có nhiều cặp sinh ba như vậy. Ví dụ, tổng 10 có thể được tạo ra ở dạng số 1,6,3 cũng như 1,5,4. Trong bài viết này, chúng ta sẽ xem cách tìm ra tất cả các bộ ba như vậy từ một danh sách các số nhất định.
Sử dụng biến phạm vi và biến tạm thời
Đây là cách tiếp cận truyền thống, trong đó chúng tôi sẽ tạo các biến tạm thời. Các biến này sẽ giữ các phần tử từ danh sách và kiểm tra xem tổng của chúng có bằng với giá trị bắt buộc hay không. Sau đó, nó sẽ tiếp tục tích lũy các biến như vậy vào tập kết quả cuối cùng.
Ví dụ
def SumTriplets(listA, sum): trpltcnt = 0 res = [] for i in range(0, len(listA) - 1): s = set() tmp = [] # Adding first element tmp.append(listA[i]) current_sum = sum - listA[i] for j in range(i + 1, len(listA)): if (current_sum - listA[j]) in s: trpltcnt += 1 # Adding second element tmp.append(listA[j]) # Adding third element tmp.append(current_sum - listA[j]) # Appending tuple to the final list res.append(tuple(tmp)) tmp.pop(2) tmp.pop(1) s.add(listA[j]) return res listA = [11,12,13,14,15,16,17,18,19,20] print("Required triplets:\n",SumTriplets(listA, 40))
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
Required triplets: [(11, 15, 14), (11, 16, 13), (11, 17, 12), (12, 15, 13)]
Ví dụ
from itertools import combinations listA = [11,12,13,14,15,16,17,18,19,20] def fsum(val): return sum(val) == 40 res = list(filter(fsum,list(combinations(listA, 3)))) print("Required triplets:\n",res)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
Required triplets: [(11, 12, 17), (11, 13, 16), (11, 14, 15), (12, 13, 15)]