주어진 합계로 가능한 모든 쌍을 찾는 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

이것은 위의 문제에 대한 순진한 접근입니다. 먼저 빈 목록을 가져옵니다. ' 해상도 ' 루프를 시작하고 주어진 정수 목록의 각 요소를 반복합니다. 각 반복에서 요소를 추출하고 "num"에 저장하고 합계 K에 대한 나머지 차이를 찾고 주어진 목록에 차이가 있는지 확인합니다.


# 모든 쌍을 찾기 위한 Python3 프로그램
# 주어진 양의 정수 목록


def findPairs(lst, K):

res = []

동안 < /코드> <코드 클래스 = "일반"> 첫 번째:

<코드 클래스 = "일반"> 숫자 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> lst.pop ()

<코드 클래스 = "일반"> 차이 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> K <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> 숫자

<코드 클래스 = "keyword"> if diff in lst:

res.append((diff, num) )

res.reverse ()

반환 res


# 드라이버 코드

lst < /코드> <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반"> , <코드 클래스 = "값"> 5 <코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반 ">, <코드 클래스 = "값"> 7 <코드 클래스 = "일반">, <코드 클래스 = "값"> 9 <코드 클래스 = "일반">]

<코드 클래스 = "일반"> K <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 12

인쇄 (findPairs (lst, K))

< b> 종료:

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

방법 # 2: 사용 collections.Counter

이 접근 방식은 collections.Counter 를 사용하여 위에서 논의한 것과 동일한 방법을 따릅니다.


# 모든 쌍을 찾는 Python3 프로그램
# 주어진 양의 정수 목록

컬렉션 가져오기 카운터

def findPairs (lst, K):

res = []

<코드 클래스 = "일반"> 개수 <코드 클래스 = "키워드"> = 카운터(lst)


for x in 첫 번째:

y < /코드> <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> K <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> x

if (x! = y 개수 [y]) 또는 (x = = y 개수 [y ] > <코드 클래스 = "값"> 1 <코드 클래스 = "일반">):

res.append ((x, y))

count.subtract ((x, y) )


반환 res


# 드라이버 코드

< 코드 클래스 = "일반"> <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 5 <코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반">, <코드 클래스 = "값 "> 7 <코드 클래스 ="일반 ">, <코드 클래스 ="값" > 9 <코드 클래스 ="일반 ">]

<코드 클래스 = "일반"> K <코드 클래스 = "키워드"> = 12

인쇄 (findPairs (lst, K ))

종료:

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

방법 # 3: itertools.combinations (순진한 방법)

이것은 itertools.combinations 사용에 대한 순진한 접근 방식입니다. for 루프를 사용하여 각 조합을 살펴보고 원하는 조합을 찾습니다.


< tr>

#
# 정수 목록에서 모든 쌍을 찾는 Python3 프로그램 주어진 양


itertools 가져오기 조합


def findPairs (lst, K):

res = []

for var in 조합(lst, 2 ):

if var [ <코드 클래스 ="값 "> 0 <코드 클래스 ="일반 ">] <코드 클래스 = "키워드"> + <코드 클래스 = "일반"> var [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">] <코드 클래스 = "키워드"> = = K:

res.append((var [ <코드 클래스 = "값"> 0 <코드 클래스 = "일반" >], var [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">]))


반환 <코드 클래스 ="plain "> res


# 드라이버 코드

lst <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = " 일반">, <코드 클래스 = "값"> 5 <코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반"> , <코드 클래스 = "값"> 7 <코드 클래스 = "일반">, <코드 클래스 = "값"> 9 <코드 클래스 = "일반 ">]

<코드 클래스 = "일반"> K <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 12

인쇄 (findPairs (lst, K))

종료:

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

방법 # 4: itertools.combinations (효과적인 방법)


# Python3 프로그램에서
# 주어진 합계의 정수 목록

itertools 가져오기 조합


def findPairs(lst, K):


<코드 클래스 = "키워드"> 반환 [pair pair 조합 (lst, 2 ) if sum (쌍) = = K]


# 드라이버 코드 < /코드>

<코드 클래스 = "일반"> 1st <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ < 코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값 "> 5 <코드 클래스 ="일반 ">, <코드 클래스 ="값 "> 3 <코드 클래스 ="일반 ">, <코드 클래스 = "값"> 7 <코드 클래스 = "일반">, <코드 클래스 = "값"> 9 <코드 클래스 = "일반">]

<코드 클래스 = "pla in"> K = 12

인쇄 (findPairs (lst, K))

종료:

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