与えられた合計ですべての可能なペアを見つけるPythonプログラム

| | | | | | | | | | | |

例:

 入力: lst = [1、5、3、7、9] K = 12 出力: [(5、7)、(3、9)] 入力: lst = [2、1、5、7、-1、4] K = 6 出力: [(2、4)、(1、5)、(7、-1)] 

方法#1: Pythonic Naive

これは、上記の問題に対する素朴なアプローチです。まず、空のリストを取得します' res'ループを開始し、指定された整数のリストの各要素をループします。各反復で、要素を抽出して「num」に格納し、合計Kの残りの差を見つけて、指定されたリストに差があるかどうかを確認します。



#指定された量の整数のリスト内のすべてのペアを検索するためのPython3プログラム


def findPairs(lst、K):

res = []

while lst:

num = lst.pop()

diff = K - num

if diff in lst:

res.append((diff、num) )

res.reverse() < / p>

return res


#ドライバーコード

lst = [ 1 5 3 7 9 ]

K = 12

print (findPairs(lst、K))

< b>終了:

 [(5、7)、(3、9)] 

方法2:を使用するcollections.Counter

このアプローチは、 collections.Counterを使用して上記で説明したのと同じ方法に従います。


#Python3プログラムで
#指定された量の整数のリスト

from コレクション import Counter

def findPairs(lst、K):

res = []

カウント = カウンター(lst)


for x in lst:

y = K - x

if (x! = y および count [y]) または(x = = y および count [y ]&gt; 1 ):

res.append((x、y))

count.subtract((x、y) )


return res


#ドライバーコード

lst = [ 1 5 3 7 9 ]

K = 12

print (findPairs(lst、K ))

終了:

 [ (5、7)、(3、9)] 

方法#3: itertools.combinations (ナイーブな方法)

これはitertools.combinationsを使用するための素朴なアプローチです。 forループを使用して各組み合わせを調べ、必要な組み合わせを見つけます。


< tr>

#Python3プログラムで、
#内のすべてのペアを検索します。与えられた量


from itertools import 組み合わせ


def findPairs (lst、K):

res = []

for var in の組み合わせ(lst、 2 ):

if var[ 0 ] + var [ 1 ] = = K:

res.append((var [ 0 ]、var [ 1 ]))


return res


#ドライバーコード

lst = [ 1 5 3 7 9 ]

K = 12

print (findPairs(lst、K))

終了:

 [(5、7)、(3、9)] 

メソッド#4: itertools.combinations (効果的なメソッド)


#Python3プログラムで
#指定された合計の整数のリスト

from itertools インポート組み合わせ


def findPairs(lst、K):


return [pair for ペア in の組み合わせ(lst、 2 if sum (ペア) = = K]


#ドライバーコード

lst = [ 1 5 3 7 9 ]

K = 12

print (findPairs(lst、K))

終了:

 [(5、7)、(3、9)]