Если порядок элементов не важен, вы можете рассматривать каждый список как set , найти union и затем преобразовывать обратно в список:
def merge(r1, r2):
return list(set().union(r1, r2))
row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']
print(merge(row_1, row_2))
Вывод
['pop rock', 'alternative rock', 'country', 'hip hop', 'rock', 'pop']
Однако, если порядок (внешний вид) имеет значение, вы можете сделать следующее:
from itertools import chain
def merge_with_order(r1, r2):
seen = set()
result = []
for e in chain(r1, r2):
if e not in seen:
seen.add(e)
result.append(e)
return result
row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']
print(merge_with_order(row_1, row_2))
Вывод
['hip hop', 'rock', 'pop rock', 'country', 'pop', 'alternative rock']
Если вы предпочитаете однострочное использование, рассмотрите возможность использования collection.OrderedDict :
from itertools import chain
from collections import OrderedDict
def merge_with_order(r1, r2):
return list(OrderedDict.fromkeys(chain(r1, r2)))