Python列表到字符串间距

时间:2016-10-01 21:41:52

标签: python string list

我有一个这样的列表

list = ['Hi', ',', 'my', 'name', 'is', 'Bob', '!']

我想将其转换为字符串,最初,我在stackoverflow上发现可以使用.join()。所以我做了:

x = ' '.join(list)
print(x)

打印

"Hi , my name is Bob !"

当我要打印的是:

"Hi, my name is Bob!"

如何在句点和感叹号之前添加空格?我想要一个更通用的案例,以便我可以将文本文件作为列表读入,并将其转换为字符串。

谢谢!

3 个答案:

答案 0 :(得分:2)

要在一般情况下解决此问题,请使用nltk' s "moses" detokenizer

In [1]: l = ["Hi", ",", "my", "name", "is", "Bob", "!"]

In [2]: from nltk.tokenize.moses import MosesDetokenizer

In [3]: detokenizer = MosesDetokenizer()

In [4]: detokenizer.detokenize(l, return_str=True)
Out[4]: u'Hi, my name is Bob!'

detokenizer还不是稳定的nltk包的一部分。为了能够立即使用它,直接从github安装nltk

答案 1 :(得分:1)

使用简单的正则表达式怎么样?

import re

list = ['Hi', ',', 'my', 'name', 'is', 'Bob', '!']
x = re.sub(r' (\W)',r'\1',' '.join(list))
print(x)

>>> Hi, my name is Bob!

答案 2 :(得分:0)

一个不同的解决方案:

>>> from string import punctuation
>>> lis = ["Hi", ",", "my", "name", "is", "Bob", "!"]
>>> string = ''
>>> for i, x in enumerate(lis):
        if x not in punctuation and i != 0:
            string += ' ' + x
        elif x not in punctuation and i == 0:
            string += x
        else:
            string += x
>>> print(string)
"Hi, my name is Bob!"