2017-12-18 303 views
0

我的印象是,下面的代碼從一個給定的字符串中的空格:需要使用過濾器

filter(None,"Stack Overflow") 

將返回:

"StackOverflow" 

但是,當我使用Python中沒有發生(2.7)。有誰能告訴我爲什麼是這樣嗎?

+0

。所以你必須使用'''.join(過濾器......' –

+0

參見[docs](https://docs.python.org/2/library/functions.html#filter)'如果函數是None,則標識函數是假設的,也就是說,所有可迭代的元素都被刪除了。 –

回答

2

的幫助filter狀態

返回序列哪個函數(項目)的項目是真實的。如果 函數爲None,則返回true的項目。

空格的布爾值是True因此它不會被刪除。

5

你似乎想篩選出的空間,但空間並不False(其中None搜索),因此明確地檢查一個空間:

filter(lambda x: x!=' ',"Stack Overflow") 

此外,如果你只處理用繩子,不要忘記replace

"Stack Overflow".replace(' ', '') 
+0

此外,過濾器需要加入python 3.現在不太有趣 –

+0

Right - cos你得到一個生成器,但是它被標記爲2.7,但值得指出 – doctorlove

2

您需要定義一個函數,用於替換'「:

filter(lambda x: x != ' ', 'Stack Overflow') 

請參閱filter的文檔。

當沒有指定函數時,它只是比較元素是否爲「真」,以及其他任何字符。爲了更好地理解此示例,其中None是falsy值,因此被從列表中移除:有關python 3,`filter`返回一個生成對象

filter(None, ['S', 't', 'a', 'c', 'k', None, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w'])