2011-01-31 89 views
2

我有以下的代码块:移植片的代码

CODE1

lis = ["a", "s", "d"] 
string.join(lis) 

CODE2

lis = ["a", "s", "d"] 
' '.join(lis) 

结果:

对于这两种结果是'a s d'

现在,当作为默认分隔值的'sep'的值不同于''时,应该存在某些情况(如果我是正确的)。我真的很想知道这种情况何时会发生?

我有以下疑惑:

  1. 是存在的,更具体的“加入” 声明python2.x的情况下,上述两个代码之间的任何差异。

  2. 如果“是”,那么我如何因为python3.x串执行python3.x“代码1”的任务没有在该模块中提前“加入”

感谢。

+0

当你跑这两个并比较结果时,你看到了什么?请**更新**与您实际观察到的差异的问题。 – 2011-01-31 11:04:23

回答

1

这两条语句是等价的。

string.join(words[, sep]) 

连接一个列表或介入九月的出现的话 的元组。 sep的默认值是单个 空格字符。

虽然用于第二种情况:

str.join(iterable)  

返回一个字符串,它是 琴弦在迭代迭代级联。 元素之间的分隔符是提供此方法的 字符串。

由于Python 3中仍然存在第二个版本,因此您可以毫无问题地使用该版本。

来源:

2

我不得不看它 - 在string的大部分已经过时(由真实str对象实际方法替代);因此,即使在Python 2中,也应该使用' '.join。但是,没有,没有什么不同--默认为通过单个空格进行连接。' '.join是等同的)。

0

string.join接受一个列表或元组作为参数,wheras“”.join接受任何可迭代的。

如果你想传递一个列表或一个元组,这两个变体是相等的。在python3中只存在第二个变体afaik

2

没有显着的区别。在所有的情况下,你可以使用第一种形式,第二种将工作,第二种将继续在Python 3上工作。

但是,有些人发现编写一个字面字符串的方法调用看起来很刺耳,如果你是这些中的一个,然后有一些其他的选择可以考虑:

' '.join(iterable) # Maybe looks a bit odd or unfamiliar? 

您可以使用,而不是一个字符串名称:

SPACE = ' ' 
... 
SPACE.join(iterable) # Perhaps a bit more legible? 

或者你可以在相似的样式把它写入string.join(),但要注意这个论点是另一种方式轮:

str.join(' ', iterable) 

最后,高级选项是使用未绑定的方法。例如

concatenate_lines = '\n'.join 
... 
print(concatenate_lines(iterable)) 

任何这些都可以工作,只要选择你认为最好的那个。