Two list can be merge in python in many ways:

  • listOne + listTwo
  • listExtend.extend(listOne)
  • [*listOne, *listTwo]
  • list(set(listOne + listTwo))

You can watch video tutorial here: python join/merge list two and more lists

These are only some of the ways in which you can merge two list:

  • Simple join of list Python 2 and 3
  • Merge two list by extent function
  • Join two list by Unpacking Generalizations
  • Join two list removing duplicates
  • Merge more than two list
  • Performance tests

Simple join of list Python 2 and 3

The simplest and easiest to be read:

listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
listSimple = listOne + listTwo
print (listSimple)

result:

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

Join two list by extent function

Using the standard extend method of python Collections

listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
listExtend = []
listExtend.extend(listOne)
listExtend.extend(listTwo)
print(listExtend)

result:

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

Join two list by Unpacking Generalizations

It's new feature for all iterables in python since python 3.5

listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
joinedList = [*listOne, *listTwo]
print(joinedList)

result:

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

Join two list removing duplicates

In case that you don't care about the order and want to remove all duplicate values you can use:

listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
listNoDuplicates = list(set(listOne + listTwo))
print(listNoDuplicates)

result:

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

Merge more than two list

In case that you don't care about the order and want to remove all duplicate values you can use:

listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
joinedList = [*listOne, *listTwo, *listOne, *listTwo, ]
print(joinedList)

result:

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

Whole code example

4 examples of joining lists in python and a bonus of merging more than two lists:

#
# simple list merge
#
listOne = [1, 2, 3, 7, 9]
listTwo = [4, 5, 6, 7, 8]
listSimple = listOne + listTwo
print (listSimple)

#
# join list by extent
#
listExtend = []
listExtend.extend(listOne)
listExtend.extend(listTwo)
print(listExtend)

#
# merge list python 3.5 and above
#
joinedList = [*listOne, *listTwo]
print(joinedList)

#
# remove duplicates on merge
#
listNoDuplicates = list(set(listOne + listTwo))
print(listNoDuplicates)


#
# merge list more than 2
#
joinedList = [*listOne, *listTwo, *listOne, *listTwo, ]
print(joinedList)

result:

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

Performance tests

The simplest way is also the fastest one. Below you can find the test code and the results:

import pickle
import cProfile

def before():
    for i in range(1, 1000000):
        listOne = [1, 2, 3, 7, 9]
        listTwo = [4, 5, 6, 7, 8]
        listSimple = listOne + listTwo


def after():
    for i in range (1, 1000000):
        listOne = [1, 2, 3, 7, 9]
        listTwo = [4, 5, 6, 7, 8]
        listExtend = []
        listExtend.extend(listOne)
        listExtend.extend(listTwo)

def test():
    for i in range (1, 1000000):
        listOne = [1, 2, 3, 7, 9]
        listTwo = [4, 5, 6, 7, 8]
        joinedList = [*listOne, *listTwo]


cProfile.run('before()')
cProfile.run('after()')
cProfile.run('test()')

results:

4 function calls in 0.215 seconds
2000002 function calls in 0.602 seconds
4 function calls in 0.254 seconds