Из статьи wikipedia в NaN следующие методы могут приводить к NaNs:
Поскольку нет способа узнать, какая из этих операций создала NaN, нет никакого способа сравнить их, что имеет смысл.
Вы перезаписываете имена в каждом цикле, поэтому последнее значение имен - «белый дом».
Попробуйте вместо этого:
l_out = [' '.join(x) for x in names]
print(l_out)
Вывод:
['red barn', 'barn', 'front porch', 'white farm house']
Или вы можете сделать это так, как вы пытаетесь:
l_out = []
for name in names:
l_out.append(' '.join(name))
print(l_out)
Вывод:
['red barn', 'barn', 'front porch', 'white farm house']