为什么是 string.join(list) 而不是 list.join(string)?
这一直让我感到困惑。这似乎会更好:
["Hello", "world"].join("-")
比这:
"-".join(["Hello", "world"])
像这样有什么具体的原因吗?
这一直让我感到困惑。这似乎会更好:
["Hello", "world"].join("-")
比这:
"-".join(["Hello", "world"])
像这样有什么具体的原因吗?
这是因为任何可迭代对象都可以连接(例如,list,元组,dict,set),但其内容和“joiner”必须是字符串。
例如:
'_'.join(['welcome', 'to', 'stack', 'overflow'])
'_'.join(('welcome', 'to', 'stack', 'overflow'))
'welcome_to_stack_overflow'
使用字符串以外的其他内容将引发以下错误:
类型错误:序列项 0:预期的 str 实例,找到 int
这在 String 方法中进行了讨论...最后在Python-Dev achive中线程化,并被Guido接受。这个线程始于1999年6月,并被包含在2000年9月发布的Python 1.6中(并支持Unicode)。Python 2.0(包括支持的方法)于2000年10月发布。str.join
str
join
str.join(seq)
seq.join(str)
seq.reduce(str)
join
作为内置函数list
tuple
seq.reduce(str)
对新人来说很难。seq.join(str)
引入了从序列到 str/unicode 的意外依赖关系。join()
因为内置函数将仅支持特定的数据类型。因此,使用内置命名空间并不好。如果支持许多数据类型,则创建优化的实现将很困难,如果使用该方法实现,那么它将是 。join()
__add__
O(n²)
sep
以下是一些额外的想法(我自己和我朋友的):
iterable
Guido的决定被记录在历史邮件中,决定:str.join(seq)
很有趣,但看起来确实是对的!巴里,去吧...
圭多·范·罗苏姆