파이썬

[python] Python에서 두 목록을 어떻게 연결합니까?

zooheon 2022. 8. 21. 23:04
반응형

Python에서 두 목록을 어떻게 연결합니까?

예시:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

예상되는 결과:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

 

+연산자를 사용 하여 목록을 결합합니다.

listone = [1, 2, 3]
listtwo = [4, 5, 6]

joinedlist = listone + listtwo

산출:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

 

파이썬 >= 3.5대안:[*l1, *l2]

PEP 448언급할 가치가 있는 수용을 통해 또 다른 대안이 도입되었습니다 .

추가 풀기 일반화( Additional Unpacking Generalizations )라는 제목의 PEP는 일반적으로 *Python에서 별표 표시된 표현식을 사용할 때 일부 구문 제한을 줄였습니다 . 그것으로 두 목록을 결합(모든 iterable에 적용)할 수도 있습니다.

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> joined_list = [*l1, *l2]  # unpack both iterables in a list literal
>>> print(joined_list)
[1, 2, 3, 4, 5, 6]

이 기능 은 Python용으로 정의되었으며3.53.x 제품군 의 이전 버전으로 백포트되지 않았습니다 . 지원되지 않는 버전에서는 올릴 SyntaxError예정입니다.

다른 접근 방식과 마찬가지로 이 방법도 해당 목록에 있는 요소의 얕은 복사본을 만듭니다 .


접근 방식의 장점은 목록을 수행하기 위해 실제로 필요하지 않으며 반복 가능한 모든 것이 가능하다는 것입니다. PEP에 명시된 바와 같이:

이것은 또한 iterable을 목록으로 합산하는 더 읽기 쉬운 방법으로 유용합니다. 예를 들어 my_list + list(my_tuple) + list(my_range)이제 just 와 동일합니다 [*my_list, *my_tuple, *my_range].

따라서 유형 불일치로 인해 추가 +가 발생하는 동안:TypeError

l = [1, 2, 3]
r = range(4, 7)
res = l + r

다음은 수행되지 않습니다.

res = [*l, *r]

왜냐하면 먼저 iterable의 내용을 풀고 내용에서 간단히 생성하기 때문 list입니다.

 

를 사용하여 두 목록의 항목을 단순히 반복하는 생성기를 만들 수도 있습니다 itertools.chain(). 이를 통해 항목을 새 목록에 복사하지 않고 처리를 위해 목록(또는 반복 가능한 모든 항목)을 함께 연결할 수 있습니다.

import itertools
for item in itertools.chain(listone, listtwo):
    # Do something with each list item

 

반응형