Pythonic 列表转字符串方法

Posted

技术标签:

【中文标题】Pythonic 列表转字符串方法【英文标题】:Pythonic list to string method 【发布时间】:2012-08-02 17:45:01 【问题描述】:

所以我想知道将列表转换为字符串的最“pythonic”方式是什么。

例如:

string_list = ['h', 'e', 'l', 'l', 'o']
# to the string
string = 'hello'

我一直在使用''.join(string_list) 方法,但它只是感觉几乎无法阅读和迂回的方法来做如此简单的事情。

有没有更好的方法,还是我把它复杂化了?

【问题讨论】:

信不信由你,这可读的方式,但它也有点像python。 ''.join(list) 已经是一个非常pythonic的方式了,你在寻找更好的效率吗? 另外注意,不要调用你的列表list,你正在隐藏内置函数。 是的,这不是效率问题,只是让我觉得很难看。但如果它是通常的方式! @InbarRose 这是最有效的方法 【参考方案1】:

不,这是pythonic的方式。

也许你觉得应该写成:string_list.join('')。你是not alone。

可能最重要的优势是,这使得.join() 可以与任何可迭代的东西一起工作。

如果反过来,每个集合都需要自己实现一个join() 方法。如果您要创建自己的集合,您会添加.join() 方法吗?应该不会吧。

它是str 类的一个方法,这意味着它总是工作。没有惊喜。在Python and the principle of least astonishment 上阅读有关join()Flask 作者Armin Ronacher 的其他内容。

可以为len() 函数/运算符提出类似的论点,可以在上述文章的开头找到。

【讨论】:

离题评论提醒。来自(优秀的)链接文章:“装饰器有点痛苦,因为 @foo 和 @foo() 之间存在差异。如果它们以前者意味着后者的方式声明,我们现在都会更快乐。每次我想给一个以前无参数的装饰器引入一个参数时,我都想用棍子打自己和装饰器 PEP 的作者。”哈哈。确实!【参考方案2】:

使用''.join(string_list)。请注意,list 命名了一个内置类型,因此您不应该将它用于变量名称。由于 Python 字符串是不可变的,因此无论如何都需要构造一个新字符串。 ''.join(s) 是在 Python 中执行此操作的规范且有效的方法。

【讨论】:

没有更有效的方法吗?因为我一直认为''.join(s) 就像写s[0]+''+s[1]+''+s[2]+''+s[3]...s[x] @InbarRose + 方法创建 n 临时副本。 str.join 方法在单个预传递中保留所需的空间。因此,.join 方法在不平凡的情况下会胜过幼稚的+ 运算符,尤其是在有很多字符串要加入的情况下 .join() 字符串方法实际上是 Python 中组装多部分字符串的最有效方法。字符串添加很慢,因为它创建了许多字符串:首先它创建s[0]+'',然后在生成的字符串中添加s[1] 以创建另一个。 .join() 只创建一个字符串。 @InbarRose 不管如何填充“间隙”,n 仍然需要创建新字符串,除了最后一个之外的所有字符串都是临时的,因为+ 运算符重载的简单方式在 AST 中扩展和处理 @InbarRose 此外,Py_MEMCPY(p, sep, seplen); 将在 ''.join 的情况下对 0 的 seplen 执行 memcpy,因此实际上不会复制任何内容。【参考方案3】:

我认为你过于复杂了。这是来自python本身:

>>> list = ['h', 'e', 'l', 'l', 'o']
>>> sum(list, '')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]

所以,python 的建议是使用''.join

【讨论】:

这不是 OP 所要求的。他想将字符串列表转换为由列表中所有字符串组成的单个字符串。 @InbarRose 这是旧的做法 嗯,我刚刚就给定的问题提供了 python 答案(将字符串列表转换为字符串)。

以上是关于Pythonic 列表转字符串方法的主要内容,如果未能解决你的问题,请参考以下文章

Pythonic方法编码嵌套在dict中的列表项

字典对象的 Pythonic 用法(上篇)

交错两个字符串的最pythonic方法

浅谈python 字典对象的 Pythonic 用法

Pythonic 替换字符的方法

检查列表是不是已排序的 Pythonic 方法