python - index - 파이썬 두 리스트 합치기




파이썬에서 두리스트를 연결하는 방법? (19)

Python 3.3 이상에서는 다음 에서 yield를 사용할 수 있습니다 :

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

def merge(l1, l2):
    yield from l1
    yield from l2

>>> list(merge(listone, listtwo))
[1, 2, 3, 4, 5, 6]

또는 임의의 수의 반복자를 지원하려면 다음을 수행하십시오.

def merge(*iters):
    for it in iters:
        yield from it

>>> list(merge(listone, listtwo, 'abcd', [20, 21, 22]))
[1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22]

파이썬에서 두리스트를 어떻게 연결합니까?

예:

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

예상되는 결과:

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

Python에서는 호환 가능한 차원의 두 배열을이 명령으로 연결할 수 있습니다.

numpy.concatenate([a,b])

더 많은 목록을 작성하는 더 일반적인 방법은 목록에 넣고 itertools.chain.from_iterable() 사용하는 것입니다. THIS 대답을 기반으로 한 함수는 중첩 목록을 평평하게 만드는 가장 좋은 방법입니다.

>>> l=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> import itertools
>>> list(itertools.chain.from_iterable(l))
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

1. chain.from_iterable() 은 python => 2.6에서 사용할 수 있습니다. 다른 버전에서는 chain(*l)


더하기 연산자 ( + )를 사용할 수없는 경우 __add__ 함수를 사용할 수 있습니다.

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

result = list.__add__(listone, listtwo)
print(result)

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

양자 택일로, 당신이 dunders 의 사용을 dunders operator 가져 오기를 사용할 수 있습니다 :

import operator

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

result = operator.add(listone, listtwo)
print(result)

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

하나 더 쉽게 읽을 수 있다고 주장 할 수 있습니다.


두 개의 정렬 된 목록을 복잡한 정렬 규칙과 병합해야하는 경우 다음 코드와 같이 직접 정렬해야 할 수도 있습니다 (가독성을 위해 간단한 정렬 규칙을 사용합니다 :-)).

list1 = [1,2,5]
list2 = [2,3,4]
newlist = []

while list1 and list2:
    if list1[0] == list2[0]:
        newlist.append(list1.pop(0))
        list2.pop(0)
    elif list1[0] < list2[0]:
        newlist.append(list1.pop(0))
    else:
        newlist.append(list2.pop(0))

if list1:
    newlist.extend(list1)
if list2:
    newlist.extend(list2)

assert(newlist == [1, 2, 3, 4, 5])

두 목록을 정렬 된 형식으로 병합하려면 heapq 라이브러리의 병합 함수를 사용할 수 있습니다.

from heapq import merge

a = [1,2,4]
b = [2,4,6,7]

print list(merge(a,b))

또한 두 목록의 항목을 단순히 반복하는 생성기를 만들 수도 있습니다. 이렇게하면 항목을 새 목록에 복사하지 않고 처리 할 수 ​​있도록 목록 (또는 반복 가능한 항목)을 함께 연결할 수 있습니다.

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

많은 사람들이 이미 지적했듯이 itertools.chain() 은 두 목록에 똑같은 처리 방법 을 적용해야하는 경우에가는 길입니다. 필자의 경우에는 하나의 목록과 다른 목록에 다른 레이블과 플래그가있어서 약간 더 복잡한 것이 필요했습니다. 뒤에서 itertools.chain() 단순히 다음을 수행합니다.

for it in iterables:
    for element in it:
        yield element

( https://docs.python.org/2/library/itertools.html 참조 https://docs.python.org/2/library/itertools.html ) 그래서 저는 여기에서 영감을 얻었으며이 줄을 따라 뭔가를 썼습니다 :

for iterable, header, flag in ( (newList, 'New', ''), (modList, 'Modified', '-f')):
    print header + ':'
    for path in iterable:
        [...]
        command = 'cp -r' if os.path.isdir(srcPath) else 'cp'
        print >> SCRIPT , command, flag, srcPath, mergedDirPath
        [...]

여기에서 이해해야 할 요점은 목록은 다른 어떤 객체와 마찬가지로 iterable의 특별한 경우에 불과하다는 것입니다. for ... in 파이썬의 루프는 튜플 변수로 작업 할 수 있으므로 여러 변수를 동시에 루프하는 것이 간단합니다.


아무도 단순한 목록 이해력을 사용하여 제안한 것 같아서 놀랍습니다.

joined_list = [y for x in [list_one, list_two] for y in x]

추가 포장 풀기 일반화 를 사용하는 가장 최근의 접근 방법의 모든 장점을 가지고 있습니다. 즉, 목록, 튜플, 범위, 생성자와 같이 임의의 수의 다른 iterables를 연결할 수 있습니다. Python >= 3.5 제한되지 않습니다.


이 질문은 두 목록을 결합하는 것에 대해 직접 묻습니다. 그러나 그것은 많은 목록에 합류하는 방법을 찾고있을 때조차도 검색에서 꽤 높습니다 (예 : 0 목록에 합류 한 경우 포함).

가장 좋은 방법은 목록 내포물을 사용하는 것입니다.

>>> a = [[1,2,3], [4,5,6], [7,8,9]]
>>> [x for xs in a for x in xs]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

발전기도 만들 수 있습니다.

>>> map(str, (x for xs in a for x in xs))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

이전 답변

보다 일반적인 접근법을 생각해보십시오.

a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])

출력 :

[1, 2, 3, 4, 5, 6, 7, 8, 9]

이것은 [] 또는 [[1,2,3]] 일 때 올바르게 작동합니다.

그러나 itertools 하면보다 효율적으로 수행 할 수 있습니다.

a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))

list 필요하지 않지만 반복 가능한 항목 만 필요하면 list() 생략 list() .

최신 정보

의견에 패트릭 콜린스 (Patrick Collins)가 제안한 대안도 당신을 위해 일할 수 있습니다.

sum(a, [])

집합을 사용하여 고유 한 값의 병합 된 목록을 얻을 수 있습니다.

mergedlist = list(set(listone + listtwo))

파이썬에서 두리스트에 합류 :

>>> a = [1, 2, 3, 4]
>>> b = [1, 4, 6, 7]
>>> c = a + b
>>> c
[1, 2, 3, 4, 1, 4, 6, 7]

중복을 원하지 않는 경우 :

>>> a = [1, 2, 3, 4, 5, 6]
>>> b = [5, 6, 7, 8]
>>> c = list(set(a + b))
>>> c
[1, 2, 3, 4, 5, 6, 7, 8]

+ 연산자를 사용하여 결합 할 수 있습니다.

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

mergedlist = listone + listtwo

산출:

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

extends 기능을 사용할 수 있습니다.

listone.extends(listtwo)

list 객체에 정의 된 append() 메서드를 사용할 수 있습니다.

mergedlist =[]
for elem in listone:
    mergedlist.append(elem)
for elem in listtwo:
    mergedlist.append(elem)

list 을 추가하려면 extend 를 사용하여 다른 list 의 끝을 추가하십시오.

listone = [1,2,3]
listtwo = [4,5,6]
mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)

a = [1,2,3,4,5,6]
b = [7,8,9,10]
c = a.extend(b)

인쇄 (c)가 준다.

[1,2,3,4,5,6,7,8,9,10]

import itertools

A = list(zip([1,3,5,7,9],[2,4,6,8,10]))
B = [1,3,5,7,9]+[2,4,6,8,10]
C = list(set([1,3,5,7,9] + [2,4,6,8,10]))

D = [1,3,5,7,9]
D.append([2,4,6,8,10])

E = [1,3,5,7,9]
E.extend([2,4,6,8,10])

F = []
for a in itertools.chain([1,3,5,7,9], [2,4,6,8,10]):
    F.append(a)


print ("A: " + str(A))
print ("B: " + str(B))
print ("C: " + str(C))
print ("D: " + str(D))
print ("E: " + str(E))
print ("F: " + str(F))

산출:

A: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
B: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
C: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
D: [1, 3, 5, 7, 9, [2, 4, 6, 8, 10]]
E: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
F: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

lst1 = [1,2]

lst2 = [3,4]

def list_combinationer(Bushisms, are_funny):

    for item in lst1:
        lst2.append(item)
        lst1n2 = sorted(lst2)
        print lst1n2

list_combinationer(lst1, lst2)

[1,2,3,4]






list