파이썬 | 두 목록을 튜플 목록으로 연결

| | | | | | |

예:

입력:  list1 = [1, 2, 3] list2 = [`a`,` b`, `c `] 출력:  [(1,` a`), (2, `b`), (3,` c`)] 입력:  list1 = [1, 2, 3, 4] list2 = [1, 4, 9] 출력:  [(1, 1), (2, 4), (3, 9), (4, ``)] 

접근법 # 1: Naive
for 루프를 사용하여 두 목록을 튜플 목록으로 연결합니다. 그러나 단점은 두 목록의 길이가 같아야 한다는 것입니다.


def merge (목록1, 목록2):


병합 목록 = <코드 클래스 = "일반 "> [(목록1 [i], 목록2 [i]) i 범위 ( 0 , <코드 클래스 = "기능"> 렌 <코드 클래스 = "일반"> (목록1))]

<코드 class = "keyword"> 반환 병합 목록


# 드라이버 코드

<코드 클래스 = "일반"> l ist1 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스="일반">, <코드 클래스 ="값 "> 2 <코드 클래스 ="일반 ">, <코드 클래스 ="값 "> 3 <코드 클래스 = "일반">]

<코드 클래스 = "일반" > 목록2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "문자열"> `a` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 ">` b` <코드 클래스 = "일반">, <코드 클래스 = "문자열"> `c` ]

인쇄 (병합(목록1, 목록2 ))

종료:

[ (1, `a`), (2,` b`), (3, `c`)] 

접근 방식 # 2: 소박하지만 더 효과적입니다.
이 이 방법은 위의 단점을 수정하고 두 목록의 길이가 같지 않은 경우 잘 작동합니다. 이것은 또한 인덱스 오류에 대한 try catch 오류를 제공합니다.


def 병합(목록1, 목록2):


<코드 클래스 = "일반"> 병합 목록 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> []

<코드 클래스 = "keyword"> for i 범위 < 코드 클래스 = "일반"> ( <코드 클래스 = "함수"> 최대 <코드 클래스 = "일반"> (( <코드 클래스 = "함수 "> 렌 <코드 클래스 ="일반 "> (목록1), <코드 클래스 ="기능 "> 렌 <코드 클래스 ="일반 "> (목록2)))):


while :

시도 :

tup <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> (목록1 [i], 목록2 [i])

제외 IndexError:

if len (list1) > len (list2):

list2. 추가(``)

tup = (목록1 [i], 목록2 [i])

elif len (목록1) " len (list2):

list1. 추가(``)

tup = (목록1 [i], 목록2 [i])

계속


병합 목록.append (tup)

나누기

return 병합목록


# 드라이버 코드

목록1 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 2 <코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반">]

<코드 클래스 = "일반"> 목록2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 e 클래스 = "문자열"> `아` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 ">` b` <코드 클래스 = "일반" > , <코드 클래스 = "문자열"> `c` <코드 클래스 ="일반 ">]

<코드 클래스 ="기능 "> 인쇄 (병합(list1, list2))

종료:

 [(1, `a`), (2,` b`), (3, `c`)] 

접근법 # 3 zip ()
zip() 메서드를 사용하여 두 목록 항목을 연결한 다음 튜플에 삽입합니다.

def 병합(list1, list2):


병합 목록 = 튜플 ( zip (목록1, 리 st2))

return 병합 목록


# 드라이버 코드

list1 = [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 2 <코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반">]

<코드 클래스 = "일반"> 목록2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "문자열"> `a` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 ">` b` <코드 클래스 = "일반" >, <코드 클래스 = "문자열"> ` c` <코드 클래스 ="p lain ">]

인쇄 (병합(목록1, 목록2))

종료:

((1, `a`), (2, `b`), (3,` c`)) 

접근법 # 4: zip() 대신 enumerate()를 사용합니다.

이 방법은 두 개의 for 루프를 사용하여 목록을 반복하고 두 개의 목록.


def 병합(list1, list2):


<코드 클래스 = "일반"> 병합 목록 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [(p1, p2) idx1, p1 열거 (list1)

idx2, p2 열거형 ate (list2) if idx1 = <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> idx2]

<코드 클래스 ="키워드" > 반환 병합된_목록


# 드라이버 코드

list1 = [< /코드> <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값 "> 2 <코드 클래스 ="일반 "> , <코드 클래스 ="값 "> 3 <코드 클래스 ="일반 ">]

<코드 클래스 = "일반"> 목록2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "문자열"> `a` <코드 클래스 ="일반 "> , <코드 클래스 ="문자열 ">` b` <코드 클래스 = "일반">, <코드 클래스 = "문자열"> `c` ]

인쇄 (병합(목록1, 목록2 ))

종료:

[ (1, `a`), (2,` b`) , (3, `c`)] 

접근법 # 5 map () 사용 코드> 및 람다 .


# 맵()과 람다 사용

def listOfTuples (l1, l2):

반환 목록 ( 지도 ( 람다 <코드 클래스 = "일반"> x, y: (x, y), l1, l2))


<코드 클래스 s = " comment"> 드라이버 코드

list1 = [ <코드 클래스 ="값 "> 1 <코드 클래스 ="일반 ">, <코드 클래스 ="값 "> 2 <코드 클래스 = "일반 ">, <코드 클래스 = "값"> 3 <코드 클래스 = "일반">]

<코드 클래스 = "일반" > 목록2 = [ `a` , <코드 e 클래스 = "문자열"> `b` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 ">` c` <코드 클래스 = "일반"> ]


인쇄 (listOfTuples (list1, list2))

종료:

[(1, `a`), (2,` b`), (3, `c`)]