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