有条件地连接字符串列表

5
我希望你能给出更有效的方法来有条件地连接一个列表。
这个技巧似乎可以起到作用:
sentence = ['this ','is ','are ','a ','sentence']
string = ''
for i in sentence:
    if i != 'are ':
        string += i
2个回答

15
你可以使用 str.join 和一个列表推导式 来实现:
sentence = ['this ','is ','are ','a ','sentence']
string = ''.join([i for i in sentence if i != 'are '])

是的,我故意使用了列表推导式。当使用 str.join 时,它通常比生成器表达式更快,详情请参见此处


在我的电脑上,OP的解决方案比列表推导式+连接快大约5%。 - John La Rooy

6
您可以通过过滤掉 are 并使用 "".join 进行连接,如下所示。
>>> "".join(item for item in sentence if item != "are ")

这里的"".join表示使用没有填充字符的生成器表达式返回的字符串连接起来。如果你使用的是",".join,那么所有元素将被逗号连接。
实际上,使用列表比使用生成器表达式更快。因此,只需使用列表推导式将生成器表达式转换为列表,像这样:
>>> "".join([item for item in sentence if item != "are "])

我需要在 Stack Overflow 上问另一个问题,询问为什么列表推导式在这里的性能优于生成器。 - 12345678910111213
1
@mattkaeo 它已经存在了。由Python核心开发者Raymond Hettinger回答 - thefourtheye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接