我有一个包含一些文本的列表:
my_list = ['sentence1','sentence2','sentence3','sentence4' ]
我想输出这样的字符串:
'sentence1, sentence2, sentence3, sentence4'
如果我这样做,我会在最后得到一个附加的 ', '
string_sentences = ''
for sentence in my_list:
string_sentences += sentence +', '
string_sentences
output: 'sentence1, sentence2, sentence3, sentence4, '
与此方法相同,但现在是开始:
string_sentences = ''
for sentence in my_list:
string_sentences += ', ' + sentence
string_sentences
', sentence1, sentence2, sentence3, sentence4'
我唯一能想到的就是跟踪索引
string_sentences = ''
for i,sentence in enumerate(my_list):
if i +1 < len(my_list):
string_sentences += sentence +', '
else:
string_sentences += sentence
string_sentences
ouput: 'sentence1, sentence2, sentence3, sentence4'
但这似乎是一个非常普遍的问题,我想知道是否有更 pythonic 的方法来解决它。
请您参考如下方法:
使用 join将列表转换为字符串的方法。提供一个分隔符,该分隔符将位于从进入字符串的列表中提取的每个元素之间。在这种情况下,, 和逗号后的空格 ' ':
my_list = ['sentence1','sentence2','sentence3','sentence4' ]
s = ', '.join(my_list)
通过打印 s 我们将得到:
'sentence1, sentence2, sentence3, sentence4'
关于为什么在这里使用 join 实际上更可取的一些额外说明,因为它实际上以 C 速度运行,而不是从 Python 循环获得的速度。阅读性能提示 here .
最后,在执行此操作时发出警告。 join 总是需要一个可迭代的字符串。这意味着,如果您有一个整数列表 [1, 2, 3, 4]。您将无法直接调用 join。您必须将这些值中的每一个都转换为 str。一个简单的例子是这样的:
list_of_ints = [1, 2, 3, 4]
', '.join([str(n) for n in list_of_ints])
所以,进一步解释一下刚刚在上面的例子中发生了什么。因为我们实际上有一个整数列表。为了成功地从该列表创建我们的字符串,我们需要将列表中的每个元素转换为一个字符串。为此,我们将使用列表理解来创建这个字符串整数列表,然后调用您的连接方法。
现在,我们实际上没有在这里使用生成器表达式并使用列表推导的原因是,实际上 join 方法实际上会扫描可迭代对象两次,因此在这种情况下推导实际上更快。
这实际上解释得很好 here .
