예:
입력: 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
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 루프를 사용하여 각 조합을 살펴보고 원하는 조합을 찾습니다.
<코드 클래스 = "일반"> K <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 12
|
종료:
[(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)]