将列表转换为字符串的语义[重复]

Posted

技术标签:

【中文标题】将列表转换为字符串的语义[重复]【英文标题】:Semantics of turning list into string [duplicate] 【发布时间】:2013-04-24 11:05:43 【问题描述】:

包括 Python 在内的许多编程语言都支持这样的操作:

", ".join(["1","2","3"])

返回字符串

"1, 2, 3"

我知道是这种情况,但我不理解其背后的设计决策——当然,在列表上执行join 操作在语义上会更有效,如下所示:

["1","2","3"].join(", ")

如果有人能解释设计决策并对此有所了解,我将不胜感激。

编辑:看起来 javascript 在列表中有 join 方法;如果有人有特定语言遵循的约定的示例,请随时评论/回答该特定语言的选择。

【问题讨论】:

请注意,您的示例 在 python 中不起作用。该列表必须只包含字符串。 在某种意义上,列表是语言的较低级别(更基本的部分)。所以字符串知道列表,但列表不知道字符串。 我已经编辑了语法以反映这一点 - 问题更多的是关于整体语义而不是特定操作:) 【参考方案1】:

对于python,有一些反对它的论据。首先,如果它是一个接受任意可迭代的字符串方法,那么您只需要在字符串对象上支持join 方法,它就会自动适用于任何可迭代的对象。否则,自定义可迭代对象也需要支持join 方法等。

考虑:

", ".join(["1","2","3"])
", ".join(("1","2","3"))
", ".join(str(x) for x in xrange(1,4))
", ".join('1':None,'2':None,'3':None)
", ".join('1','2','3')  #set literal syntax -- python2.7+
", ".join("123")

6 种不同的类型都由一个方法非常简单地支持(我只接触了内置类型)。

其次,如果列表中的所有内容都是 basestring 类型,则您只能 join 列表。在列表上提供一个方法似乎很愚蠢,如果您在内容错误的列表上使用它会引发异常——至少,这里的 API 似乎有点棘手(对我来说)。当然,您可以争辩说list.remove 如果使用错误的参数调用会引发异常。这是真的——但一般来说你只是删除一个项目。它的运行水平低于join 应有的水平。当然,这个论点比我提出的第一个论点要弱,所以如果你不喜欢它,就回到论点 1。

【讨论】:

以上是关于将列表转换为字符串的语义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表转换为字符串[重复]

将列表转换为字符串[重复]

将字符列表转换为字符串[重复]

Java将字符串转换为枚举列表[重复]

将列表转换为字符串或单词[重复]

将字符串列表转换为一个字符串[重复]