2011-01-31 97 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)) 

任何這些都可以工作,只要選擇你認爲最好的那個。