現在我有這樣的:將兩張。加入方法爲一個
str = " s tr & &^ 23G7/*%45afju657**(%^#%$!!fdf"
str = ''.join(e for e in str if e.isalnum())
str = ''.join(('...', str, '...'))
我可以將它們合併喜歡:
str = ''.join(('...', e for e in str if e.isalnum(), '...'))
現在我有這樣的:將兩張。加入方法爲一個
str = " s tr & &^ 23G7/*%45afju657**(%^#%$!!fdf"
str = ''.join(e for e in str if e.isalnum())
str = ''.join(('...', str, '...'))
我可以將它們合併喜歡:
str = ''.join(('...', e for e in str if e.isalnum(), '...'))
您可以使用format
有
s = "...{}...".format(''.join(e for e in s if e.isalnum()))
作爲一個側面說明,因爲它的影子了內置
除了不命名你的字符串作爲str
,如果你真的真的想用join
兩次,你可以把它寫成
''.join(('...', ''.join(e for e in s if e.isalnum()), '...'))
但這不是一個好主意。爲什麼要用核彈來殺死蚊子!
哦哈哈我雖然'''是他的'my_str'的其他部分... ...不是一個litteral' ...'+1 –
@JoranBeasley它很清楚''...''; –
是啊20- 20後見之明,重新閱讀我可以看到的問題:P –
string = " s tr & &^ 23G7/*%45afju657**(%^#%$!!fdf"
您可以使用filter()
作爲一個理解語法糖。它適用於函數而不是方法,但是 - 將字符串方法僞裝成函數的lambda
與簡單理解(謝謝,@Bhargav)相比變得更慢。
string = ''.join(['...', ''.join(filter(lambda x: x.isalnum(), string)), '...'])
或:
取決於什麼命令你喜歡。
有趣的是,這裏使用'lambda'使得操作非常緩慢,與非lambda解決方案相比速度幾乎相同。 –
@ TigerhawkT3小錯字,需要x.isalnum() –
注意到λ緩慢,錯誤修正。感謝您指出這些。 – TigerhawkT3
爲什麼不使用+
運算符?而filter
也相當不錯。既然你使用Python 2.7,你甚至不需要重新加入:
>>> s = " s tr & &^ 23G7/*%45afju657**(%^#%$!!fdf"
>>> s = '...' + filter(str.isalnum, s) + '...'
>>> s
'...str23G745afju657fdf...'
我喜歡在這裏使用'str.'。對於2.7中較長的字符串,使用join()而不是串聯會更快嗎? – TigerhawkT3
@ TigerhawkT3而不是什麼級聯?哦,你的意思是'+'?我不這麼認爲,但我會嘗試。 –
不,沒有區別。爲什麼呢? –
你試過運行它嗎? –
不,因爲'e for e ...'部分不是一個字符串,'join'需要。你可以這樣做:'str =''.join(('''',''.join(e for str in if e.isalnum()),'...'))' – malfunctioning
@SterlingArcher ,http://ideone.com/QWJWmA – niceday