这一直让我困惑。看起来这样会更好:
["Hello", "world"].join("-")
除此之外:
"-".join(["Hello", "world"])
有什么具体的原因吗?
这一直让我困惑。看起来这样会更好:
["Hello", "world"].join("-")
除此之外:
"-".join(["Hello", "world"])
有什么具体的原因吗?
当前回答
将其视为拆分的自然正交操作。
我明白为什么它适用于任何可迭代的东西,所以不能简单地在列表中实现。
为了可读性,我希望在语言中看到它,但我认为这实际上是不可行的-如果可迭代性是一个接口,那么它可以添加到接口中,但这只是一个约定,因此没有中心方法将它添加到可迭代的一组东西中。
其他回答
这是因为任何可迭代的都可以连接(例如,列表、元组、dict、集合),但其内容和“joiner”必须是字符串。
例如:
'_'.join(['welcome', 'to', 'stack', 'overflow'])
'_'.join(('welcome', 'to', 'stack', 'overflow'))
'welcome_to_stack_overflow'
使用字符串以外的其他内容将引发以下错误:
TypeError:序列项0:应为str实例,找到int
将其视为拆分的自然正交操作。
我明白为什么它适用于任何可迭代的东西,所以不能简单地在列表中实现。
为了可读性,我希望在语言中看到它,但我认为这实际上是不可行的-如果可迭代性是一个接口,那么它可以添加到接口中,但这只是一个约定,因此没有中心方法将它添加到可迭代的一组东西中。
因为join()方法在字符串类中,而不是列表类中。
看见http://www.faqs.org/docs/diveintopython/odbchelper_join.html:
历史记录。当我第一次学习Python,我希望join是一个方法一个列表分隔符作为参数。许多人们也有同感联接方法背后的故事。先前的对于Python 1.6,字符串没有全部这些有用的方法。有一个包含的单独字符串模块所有字符串函数;每个函数将字符串作为第一个字符串论点这些功能被视为足够重要的字符串本身,这是有意义的对于下部、上部和分裂但许多硬核Python程序员反对新加入方法,认为它应该是方法,或者它根本不应该动,只是呆着旧字符串模块的一部分(仍然有很多有用的东西)。我只使用新的联接方法,但你也会看到代码如果真的困扰你,你可以使用旧的string.join函数相反---Mark Pilgrim,深入Python
我同意一开始这是违反直觉的,但有一个很好的理由。联接不能是列表的方法,因为:
它也必须适用于不同的可迭代对象(元组、生成器等)它必须在不同类型的字符串之间具有不同的行为。
实际上有两种连接方法(Python 3.0):
>>> b"".join
<built-in method join of bytes object at 0x00A46800>
>>> "".join
<built-in method join of str object at 0x00A28D40>
如果join是列表的一个方法,那么它必须检查其参数,以决定调用其中的哪一个。而且你不能将byte和str连接在一起,所以它们现在的方式是有意义的。
变量my_list和“-”都是对象。具体来说,它们分别是类列表和str的实例。join函数属于str类。因此,使用语法“-”.join(my_list)是因为对象“-”将my_list作为输入。