这一直困扰着我。看起来这会更好:
my_list = ["Hello", "world"]
print my_list.join("-")
# Produce: "Hello-world"
比这个:
my_list = ["Hello", "world"]
print "-".join(my_list)
# Produce: "Hello-world"
是否有这样的具体原因?
这是因为任何可迭代都可以连接,而不仅仅是列表,但结果和 “连接” 总是字符串。
例如:
import urllib2
print '\n############\n'.join(
urllib2.urlopen('http://data.stackexchange.com/users/7095'))
因为join()
方法在字符串类中,而不是列表类?
我同意它看起来很有趣。
请参阅http://www.faqs.org/docs/diveintopython/odbchelper_join.html :
历史记录。当我第一次学习 Python 时,我希望 join 是一个列表的方法,它将分隔符作为参数。很多人都有同样的感觉,加入方法背后有一个故事。在 Python 1.6 之前,字符串没有所有这些有用的方法。有一个单独的字符串模块,其中包含所有字符串函数; 每个函数都将一个字符串作为其第一个参数。这些函数被认为足够重要,可以放在字符串本身,这对于 lower,upper 和 split 等函数有意义。但许多硬核 Python 程序员反对新的连接方法,认为它应该是列表的方法,或者它根本不应该移动,而只是保留旧字符串模块的一部分(仍然有很多其中有用的东西)。我只使用新的连接方法,但是您将看到以任何方式编写的代码,如果它真的困扰您,您可以使用旧的 string.join 函数。
--- Mark Pilgrim,潜入 Python
这是在String 方法中讨论的...... 最终在 Python-Dev achive 中的线程,并被 Guido 接受。该线程始于 1999 年 6 月, str.join
包含在 2000 年 9 月发布的 Python 1.6 中(并支持 Unicode)。 Python 2.0(支持str
方法,包括join
)于 2000 年 10 月发布。
str.join(seq)
seq.join(str)
seq.reduce(str)
join
list
s, tuple
s,还要支持所有序列 / iterables。 seq.reduce(str)
对新来者来说很难。 seq.join(str)
将序列中的意外依赖引入 str / unicode。 join()
作为内置函数只支持特定的数据类型。因此使用内置命名空间并不好。如果join()
支持许多数据类型,那么创建优化的实现将很困难,如果使用__add__
方法实现,则它是 O(n²)。 sep
)。显式优于隐式。 此主题中没有其他原因。
这里有一些额外的想法(我自己和我的朋友):
Guido 的决定记录在历史邮件中 ,决定str.join(seq)
:
有趣,但看起来确实对!巴里,去吧......
--Guido van Rossum