04 November, 2008

Python Idiom: join

如果要將一個 list 中的所有字串接起來 ,一般的做法是
items = ['red', 'blue', 'green', 'yellow']

result = ''
for s in items:
    result += s
Python 提供了一個更有效率的解法
result = ''.join(items)
如果字串中間要用逗號跟空白做分隔時,只要改成
result = ', '.join(items)
單括號內的字串就是隔開 items 元素的分隔物, 所以如果單括號內是空的,就表示沒有分隔物。 底下介紹上述技巧的應用
colors = ['red', 'blue', 'green', 'yellow']
print 'Choose', ', '.join(colors[:-1]), 'or', colors[-1]
colors[:-1] 會傳回一個 list 包含 colors 內的所有元素除了最後一個, 而 colors[-1] 代表 colors 的最後一個元素。 所以執行上面的程式碼會顯示
Choose red, blue, green or yellow
假設在把字串接起來之前,想要對字串做一些處理, 比方說轉成大寫,一般的想法是
items = ''
for c in colors:
     items += c.upper() 
有了 join 之後,也是一行就可完成
items = ''.join(c.upper() for c in colors)
眼尖的人會發現上面一行還用了 list comprehensions

PS. Python 的創造者 Guido van Rossum 寫過一篇 最佳化軼事 內容與字串相關,值得一讀。

No comments: