Belirli bir toplam ile tüm olası çiftleri bulmak için Python programı

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

Örnekler:

Girdi:  lst = [1, 5, 3, 7, 9] K = 12 Çıktı: < / güçlü> [(5, 7), (3, 9)] Girdi:  lst = [2, 1, 5, 7, -1, 4] K = 6 Çıktı: < / güçlü> [(2, 4), (1, 5), (7, -1)] 

Yöntem # 1: Pythonic Naive

Bu, yukarıdaki soruna naif bir yaklaşımdır. İlk önce boş bir liste alıyoruz ' yeniden ' ve verilen tamsayılar listesinin her bir öğesi boyunca döngü ve döngü başlatın. Her yinelemede öğeyi çıkarın, "num" içinde saklayın, K toplamı için kalan farkı bulun ve verilen listede bir fark olup olmadığını kontrol edin.


# Python3 programı
# belirli bir miktardaki tamsayılar listesindeki tüm çiftleri bulmak için


def findPairs (lst, K):

res = []

iken lst:

sayı = lst.pop ()

diff = K - sayı

if fark in lst:

res.append ((diff, num) )

res.reverse ()

dönüş res


# Sürücü kodu

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

< b> Çıkış:

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

Yöntem # 2: Kullanımı collections.Counter

Bu yaklaşım, yukarıda collections.Counter kullanılarak açıklanan yöntemin aynısını izler.


# Python3 programı
# belirli bir miktardaki tamsayılar listesindeki tüm çiftleri bulmak için

koleksiyonlardan import Sayaç

def findPairs (lst, K):

res = []

sayım = Counter (lst)


için x lst:

y = K - x

if (x! = y ve sayım [y]) veya (x = = y ve sayım [y ] > 1 ):

res.append ((x, y))

say.subtract ((x, y) )


dönüş res


# Sürücü kodu

< kod sınıfı = "düz"> lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

yazdır (findPairs (lst, K ))

Çıkış:

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

Yöntem # 3: itertools.combinations (Saf Yöntem)

Bu, itertools.combinations kullanımına yönelik saf bir yaklaşımdır. Her kombinasyonu gözden geçirmek ve istediğimizi bulmak için bir for döngüsü kullanırız.


< tr>

# Python3 programı
içindeki tüm çiftleri bulmak için verilen miktar


itertools import kombinasyonlar


def findPairs (lst, K):

res = []

için var kombinasyonlar (lst, 2 ):

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

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


dönüş res


# Sürücü kodu

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

Çıkış:

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

Yöntem # 4: itertools.combinations (etkili yöntem)


# Python3 programı
# belirli bir toplamlı tamsayılar listesindeki tüm çiftleri bulmak için

itertools import kombinasyonlardan


def findPairs (lst, K):


dönüş [çift için çift kombinasyonlarında (lst, 2 ) if toplam (çift) = = K]


# Sürücü kodu

lst = [ < kod sınıfı = "değer"> 1 , 5 , 3 , 7 , 9 ]

K = 12

yazdır (findPairs (lst, K))

Çıkış:

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