Как преобразовать список из списка слов в виде строк?

1

Я пробовал способы преобразования списка в строки, как это было найдено в других вопросах, но результат, похоже, не является тем, что я должен получить. У меня есть вход [['This','is','here.'],['Second','sentence','here.']] И я хотел бы преобразовать это в строку и сохранить в текстовый файл с выходом:

This is here.
Second sentence here.

что я сделал,

list = [['This','is','here.'],['Second','sentence','here.']]
with open(outfile, 'w') as newfile:
    newfile.write(str('\n'.join((str(i) for i in list))))

Результатом этого в файле.txt является:

['This', 'is', 'here.']
['Second', 'sentence', 'here.']

Помощь очень ценится. Спасибо!

Теги:
python-3.x
python-2.7

2 ответа

1
Лучший ответ

Вы можете попробовать lst = '\n'.join(' '.join(i) for я in txt) (Также полезно использовать имя переменной, отличное от list):

txt = [['This','is','here.'],['Second','sentence','here.']]
with open(outfile, 'w') as newfile:
    lst = '\n'.join(' '.join(i) for i in txt)
    newfile.write(lst)

Обновить:

Похоже, что в элементе списка нет None, вы можете отфильтровать их, как описано в другом ответе, и использовать следующее:

txt = [['This','is','here.'],['Second','sentence','here.'], ['Here',None, 'is']]
lst = '\n'.join(' '.join(list(filter(None.__ne__, i))) for i in txt)
print(lst)

Результат:

This is here.
Second sentence here.
Here is

Как было предложено в комментариях ниже, просто добавление дополнительных результатов синхронизации для сравнения filter с list comprehension в этом случае, а list comprehension выполняется быстрее:

%%timeit
txt = [['This','is','here.'],['Second','sentence','here.'], ['Here',None, 'is']]
lst = '\n'.join(' '.join(list(filter(None.__ne__, i))) for i in txt)

# Result: 100000 loops, best of 3: 4.52 µs per loop

%%timeit
txt = [['This','is','here.'],['Second','sentence','here.'], ['Here',None, 'is']]
lst = '\n'.join(' '.join(([j for j in i if j != None])) for i in txt)

# Result: 100000 loops, best of 3: 3.28 µs per loop
  • 0
    Дополнительный вопрос ... Допустим, я хотел дать правую / левую клавиатуру между словами, как мне этого добиться?
  • 0
    Я не совсем уверен, что понимаю вопрос: каков ожидаемый результат в приведенном выше тексте?
Показать ещё 12 комментариев
0

Вы можете использовать str.join для преобразования списка в строки

>>> l=[['This','is','here.'],['Second','sentence','here.']]
>>> print ('\n'.join([' '.join(e) for e in l]))
This is here.
Second sentence here.
>>> 
  • 0
    я пробовал это, но это привело к ошибке: Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден NoneType

Ещё вопросы

Сообщество Overcoder
Наверх
Меню